筆試題練習(八)

2021-05-07 09:57:51 字數 2245 閱讀 6304

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