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]
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...