1
,不使用中間變數實現
strlen
intstrlen_p(
const
char*p)
2,統計32位整數二進位制表示1的個數
bool
ispowof2(
intn)
intcountones(
intn)
return
count;
}int
countzeros(
intn) 3
,題目:
有乙個陣列
t[100]
,存放了1~
99之間的數字,用效率較高的**把重複數字去掉。例如陣列變成。
bool
flag[
100] =;
//flag[1]flag[99],flag[0]不用
intremoveredundant(
intt,
intsize)
}for
(i =
1; i
<
size;
++i)
}return
end;}
4,寫乙個程式
, 要求功能:求出用1,
2,5這三個數不同個數組合的和為
100的組合個數。如:
100個
1是乙個組合,5個
1加19個
5是乙個組合。 因為
x+2y+5z=100 所以
x+2y=100-5z
,且z<=20 x<=100 y<=50 所以
(x+2y)<=100
,且(x+5z)
是偶數 對z
作迴圈,求
x的可能值如下(
x的取值種數就代表了最終解的個數,對於某個z,
x定了後
y自動確定):
z=0, x=100, 98, 96, ... 0
z=1, x=95, 93, ..., 1
z=2, x=90, 88, ..., 0
z=3, x=85, 83, ...,
z=4, x=80, 78, ..., 0
......
z=19, x=5, 3, 1
z=20, x=0
因此,組合總數為
100以內的偶數
+95以內的奇數
+90以內的偶數
+...+5
以內的奇數
+1,即為:
(51+48)+(46+43)+(41+38)+(36+33)+(31+28)+(26+23)+(21+18)+(16+13)+(11+8)+(6+3)+1
某個偶數
m以內的偶數個數(包括
0)可以表示為
m/2+1=(m+2)/2
某個奇數
m以內的奇數個數也可以表示為
(m+2)/2
所以,求總的組合次數可以程式設計為:
intnumber=0
;for
(intm=
0;m<=
100;m+=5
)cout
<<
number
<<
endl;
這個程式,只需要迴圈21次
, 兩個變數,就可以得到答案,比最常見的那個窮舉法要高效的多
5,通過一次遍歷找到單鏈表中倒數第
n個節點,鍊錶可能相當大,可使用輔助空間,但是輔助空間的數目必須固定,不能和
n有關。
struct
node
;node
*findlastnth(node
*head,
intn)
if(i
<
n)else
if(p2
->
next
==null)
while
(p2->
next
!=null)
return
p1;} 6
,有1,2,....
一直到n
的無序陣列,求排序演算法,並且要求時間複雜度為
o(n)
,空間複雜度
o(1)
,使用交換,而且一次只能交換兩個數.
void
sortonorder(
intarray,
intlen)
elsei++
; //
儲存,以後此值不會再動了}}
筆試題練習(八)
1,不使用中間變數實現strlen intstrlen p const char p 2,統計32位整數二進位制表示1的個數 bool ispowof2 intn intcountones intn return count int countzeros intn 3,題目 有乙個陣列t 100 存...
筆試題練習(六)
1,輸入n,列印 n n螺旋矩陣 比如 n 3,列印 n 4,列印 1 2 3 4 109 8 7 author phinecos since 2005 05 27 public class test inti 上 for i n m i m i 右for i n m 1 i1 i 下 for i ...
筆試題練習(一)
1,請定義乙個巨集,比較兩個數a b的大小,不能使用大於 小於 if語句 答 define max a,b a b abs a b a b 若a b,則a b和abs a b 均大於0,若a 2,如何輸出原始檔的標題和目前執行行的行數 複製 include using namespace std i...