筆試題練習(八)

2021-08-30 01:32:55 字數 1850 閱讀 2521

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