看一下這是一些c++面試的筆試,對於學習c++的你也許也是個考驗吧,有時間做做吧
給定九個數,例如:1,3,3,5,6,7,8,8,9計算出這九個數的排列的種數。需要考慮重複情況,如果給定9個1,則只有一種結果。
限制:不能使用stl庫
要求:完成函式 unsigned int foo(unsigned int *arr);
輸入演算法**,並給出演算法複雜度分析。
分析:
#include
#include
using namespace std;
unsigned int foo(unsigned int *arr)
;unsigned int i,j,c,s=p[8];//first the number is p99
for(i = 0; i < 7; i++)
for(j = i+1; j < 8; j++)
}i = 0;
c = 0;
while(i<8)
s/=p[c];
c=0;
i=j; [page]
}return s;
}int main()
;cout<
還可以改進排序那部分。
轉乙個經典的題目:
給乙個天平,問如何用3次把這個小球找出來並且求出這個小球是比其他的輕還是重將12個球分別編號為a1,a2,a3……a10,a11,a12.
第一步:將12球分開3撥,每撥4個,a1~a4第一撥,記為b1, a5~a6第2撥,記為b2,其餘第3撥,記為b3;
第二步:將b1和b2放到天平兩盤上,記左盤為c1,右為c2;這時候分兩中情況:
1.c1和c2平衡,此時可以確定從a1到a8都是常球;然後把c2拿空,並從c1上拿下a4,從a9到a12四球裡隨便取三球,假設為a9到a11,放到c2上。此時c1上是a1到a3,c2上是a9到a11.從這裡又分三種情況:
a:天平平衡,很簡單,說明沒有放上去的a12就是異球,而到此步一共稱了兩次,所以將a12隨便跟11個常球再稱一次,也就是第三次,馬上就可以確定a12是重還是輕;
b:若c1上公升,則這次稱說明異球為a9到a11三球中的乙個,而且是比常球重。取下c1所有的球,並將a8放到c1上,將a9取下,比較a8和a11(第三次稱),如果平衡則說明從c2上取下的a9是偏重異球,如果不平衡,則偏向哪盤則哪盤裡放的就是偏重異球;
c:若c1下降,說明a9到a11裡有乙個是偏輕異球。次種情況和b類似,所以接下來的步驟照搬b就是;
2.c1和c2不平衡,這時候又分兩種情況,c1上公升和c1下降,但是不管哪種情況都能說明a9到a12是常球。這步是解題的關鍵。也是這個題最妙的地方。
a:c1上公升,此時不能判斷異球在哪盤也不能判斷是輕還是重。取下c1中的a2到a4三球放一邊,將c2中的a5和a6放到c1上,然後將常球a9放到c2上。至此,c1上是a1,a5和a6,c2上是a7,a8和a9.此時又分三中情況:
1)如果平衡,說明天平上所有的球都是常球,異球在從c1上取下a2到a4中。而且可以斷定異球輕重。因為a5到a8都是常球,而第2次稱的時候c1是上公升的,所以a2到a4裡必然有乙個輕球。那麼第三次稱就用來從a2到a4中找到輕球。這很簡單,隨便拿兩球放到c1和c2,平衡則剩餘的為要找球,不平衡則哪邊低則哪個為要找球;
2)c1仍然保持上公升,則說明要麼a1是要找的輕球,要麼a7和a8兩球中有乙個是重球(這步懂吧?好好想想,很簡單的。因為a9是常球,而取下的a2到a4肯定也是常球,還可以推出換盤放置的a5和a6也是常球。所以要麼a1輕,要麼a7或a8重)。至此,還剩一次稱的機會。只需把a7和a8放上兩盤,平衡則說明a1是要找的偏輕異球,如果不平衡,則哪邊高說明哪個是偏重異球;
3)如果換球稱第2次後天平平衡打破,並且c1降低了,這說明異球肯定在換過來的a5和a6兩求中,並且異球偏重,否則天平要麼平衡要麼保持c1上公升。確定要找球是偏重之後,將a5和a6放到兩盤上稱第3次根據哪邊高可以判定a5和a6哪個是重球;
b:第1次稱後c1是下降的,此時可以將c1看成c2,其實以後的步驟都同a,所以就不必要再重複敘述了。至此,不管情況如何,用且只用三次就能稱出12個外觀手感一模一樣的小球中有質量不同於其他11球的偏常的球。而且在稱的過程中可以判定其是偏輕還是偏重。
3.u2 合唱團在17 分鐘內得趕到演唱會場,途中必需跨過一座橋,四個人從橋的同一端出發,你得幫助他們到達另一端,天色很暗,而他們只有乙隻手電筒。一次同時最多可以有兩人 一起過橋,而過橋的時候必須持有手電筒,所以就得有人把手電筒帶來帶去,來回橋兩端 .手電筒是不能用丟的方式來傳遞的。四個人的步行速度各不同,若兩人同行則以較慢者 的速度為準。bono 需花1 分鐘過橋,edge 需花2 分鐘過橋,adam需花 5 分鐘過橋,larry 需花 10 分鐘過橋。他們要如何在 17 分鐘內過橋呢?(有個同濟的學生寫文章說他當時在微軟面 試時就是碰到了這道題,最短只能做出在 19分鐘內過橋,微軟的人對他講這樣的結果已經 是不錯的了!)
a點到 b 點
1 和2 過去 2 分鐘 2
2 過來 4 分鐘 2+2=4
10和 5過去 14 分鐘 4+10=14
1 過來 15 分鐘 14+1=15
1 和2 過去 17 分鐘 15+2=17
面試筆試題
1 昨天參加一公司筆試,給幾道演算法題整懵了,其實也不難,但好久沒有碰演算法,只是有思路,要讓我在這麼短的時間內寫出程式來還是不行。2 這裡將其中一道稍微複雜一點的演算法題寫下來,以此小結。3 4 題目描述 5 將n個雞蛋放入到m個籃子中去 n m 保證每個籃子中至少乙個雞蛋,然後指定乙個數x,要求...
面試筆試題
1.文字檔案裡面有很多單詞 單詞與單詞之間以空格 換行符隔開,且不管單個單詞的正確性 統計各單詞出現的次數,刪掉出現次數最少的那些 實現 fstream讀入事先準備好的檔案test.txt,存到c 的關聯容器map,用單詞string做key,出現的次數int做value,找到最小的value,然後...
面試筆試題
智力 1.有abcd四人過橋,時間為1,2,5,10,只有乙個手電筒,同時只能過兩人,怎麼過17分鐘能過完?2 1 10 2 2 走的快的就多走走 2.假設有乙個池塘,裡面有無窮多的水,現有兩個空水壺,容積分別為5公升和6公升,如何只用這2個水壺從池塘裡取得3公升的水 1l 6 5 2l 6 5 1...