• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級} {C#界面,C++核心算法} {設(shè)計模式} {C#基礎(chǔ)}

            筆試題二(轉(zhuǎn))

            給定九個數(shù),例如:1,3,3,5,6,7,8,8,9計算出這九個數(shù)的排列的種數(shù)。需要考慮重復(fù)情況,如果給定9個1,則只有一種結(jié)果。
            限制:不能使用stl庫
            要求:完成函數(shù) unsigned int foo(unsigned int *arr);
            輸入算法代碼,并給出算法復(fù)雜度分析。

            分析: 

            #include <cstdlib>
            #include <iostream>

            using namespace std;
            unsigned int foo(unsigned int *arr)
            {
                unsigned int p[] ={1,2,6,24,120,720,5040,40320,362880};
                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++)
                   {
                       if(arr[i]>arr[j])  //swap two number
                       {
                           arr[i]^=arr[j];
                           arr[j]^=arr[i];
                           arr[i]^=arr[j];
                       }   
                   }   
                i = 0;
                c = 0;
                while(i<8)
                {
                    j = i+1;
                    while(arr[i]==arr[j])//compute the number of the repetition 
                    {
                        c++;   
                        j++; 
                    }   
                    s/=p[c];
                    c=0;
                    i=j;
                }   
                return s;
            }
              
            int main()
            {
                unsigned int a[]={1,3,3,5,6,7,8,8,9};
                cout<<"The number of permutation is: "<<foo(a)<<endl;
                system("pause");
                return 0;
            }    
            還可以改進(jìn)排序那部分。

            轉(zhuǎn)一個經(jīng)典的題目:

            給一個天平,問如何用3次把這個小球找出來
            并且求出這個小球是比其他的輕還是重
            將12個球分別編號為a1,a2,a3.......a10,a11,a12.
            第一步:將12球分開3撥,每撥4個,a1~a4第一撥,記為b1, a5~a8第2撥,記為b2,其余第3撥,記為b3;
            第二步:將b1和b2放到天平兩盤上,記左盤為c1,右為c2;這時候分兩中情況:

            1.c1和c2平衡,此時可以確定從a1到a8都是常球;然后把c2拿空,并從c1上拿下a4,從a9到a12四球里隨便取三球,假設(shè)為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是常球。這步是解題的關(guān)鍵。也是這個題最妙的地方。
                 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重)。至此,還剩一次稱的機(jī)會。只需把a(bǔ)7和a8放上兩盤,平衡則說明a1是要找的偏輕異球,如果不平衡,則哪邊高說明哪個是偏重異球;
                     3)如果換球稱第2次后天平平衡打破,并且c1降低了,這說明異球肯定在換過來的a5和a6兩求中,并且異球偏重,否則天平要么平衡要么保持c1上升。確定要找球是偏重之后,將a5和a6放到兩盤上稱第3次根據(jù)哪邊高可以判定a5和a6哪個是重球;
                 B:第1次稱后c1是下降的,此時可以將c1看成c2,其實以后的步驟都同A,所以就不必要再重復(fù)敘述了。至此,不管情況如何,用且只用三次就能稱出12個外觀手感一模一樣的小球中有質(zhì)量不同于其他11球的偏常的球。而且在稱的過程中可以判定其是偏輕還是偏重。

            3.U2 合唱團(tuán)在17 分鐘內(nèi)得趕到演唱會場,途中必需跨過一座橋,四個人從橋的同一端出發(fā),你得幫助他們到達(dá)另一端,天色很暗,而他們只有一只手電筒。一次同時最多可以有兩人一起過橋,而過橋的時候必須持有手電筒,所以就得有人把手電筒帶來帶去,來回橋兩端。手電筒是不能用丟的方式來傳遞的。四個人的步行速度各不同,若兩人同行則以較慢者的速度為準(zhǔn)。Bono 需花1 分鐘過橋,Edge 需花2 分鐘過橋,Adam需花 5 分鐘過橋,Larry 需花10 分鐘過橋。他們要如何在17 分鐘內(nèi)過橋呢?(有個同濟(jì)的學(xué)生寫文章說他當(dāng)時在微軟面試時就是碰到了這道題,最短只能做出在19分鐘內(nèi)過橋,微軟的人對他講這樣的結(jié)果已經(jīng)是不錯的了?。?nbsp;
              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.燒一根不均勻的繩,從頭燒到尾總共需要1個小時?,F(xiàn)在有若干條材質(zhì)相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?
                   ans:三根繩,開始的時候,第一根點燃兩端,第二根點燃一端,第三根不點。第一根繩燒完(30分鐘)后,點燃第二根繩的另一端,第二根只要15分鐘就可以燒完了,第二根繩燒完(45分鐘)后,點燃第三根繩子兩端,第三根繩燒完(1小時15分)后,計時完成

              2.你有一桶果凍,其中有黃色、綠色、紅色三種,閉上眼睛抓取同種顏色的兩個。抓取多少個就可以確定你肯定有兩個同一顏色的果凍?

              3.如果你有無窮多的水,一個3公升的提捅,一個5公升的提捅,兩只提捅形狀上下都不均勻,問你如何才能準(zhǔn)確稱出4公升的水?

              4.一個岔路口分別通向誠實國和說謊國。來了兩個人,已知一個是誠實國的,另一個是說謊國的。誠實國永遠(yuǎn)說實話,說謊國永遠(yuǎn)說謊話?,F(xiàn)在你要去說謊國,但不知道應(yīng)該走哪條路,需要問這兩個人。請問應(yīng)該怎么問?

              5.12個球一個天平,現(xiàn)知道只有一個和其它的重量不同,問怎樣稱才能用三次就找到那個球。13個呢?(注意此題并未說明那個球的重量是輕是重,所以需要仔細(xì)考慮)

              6.在9個點上畫10條直線,要求每條直線上至少有三個點?

              7.在一天的24小時之中,時鐘的時針、分針和秒針完全重合在一起的時候有幾次?都分別是什么時間?你怎樣算出來的?

              8.怎么樣種植4棵樹木,使其中任意兩棵樹的距離相等?

              第二組  

              1.為什么下水道的蓋子是圓的?

              2.中國有多少輛汽車?

              3.將汽車鑰匙插入車門,向哪個方向旋轉(zhuǎn)就可以打開車鎖?

              4.如果你要去掉中國的34個省(含自治區(qū)、直轄市和港澳特區(qū)及臺灣省)中的任何一個,你會去掉哪一個,為什么?

              5.多少個加油站才能滿足中國的所有汽車?

              6.想象你站在鏡子前,請問,為什么鏡子中的影象可以顛倒左右,卻不能顛倒上下?

              7.為什么在任何旅館里,你打開熱水,熱水都會瞬間傾瀉而出?

              8.你怎樣將Excel的用法解釋給你的奶奶聽?

              9.你怎樣重新改進(jìn)和設(shè)計一個ATM銀行自動取款機(jī)?

              10.如果你不得不重新學(xué)習(xí)一種新的計算機(jī)語言,你打算怎樣著手來開始?

              11.如果你的生涯規(guī)劃中打算在5年內(nèi)受到獎勵,那獲取該項獎勵的動機(jī)是什么?觀眾是誰?

              12.如果微軟告訴你,我們打算投資五百萬美元來啟動你的投資計劃,你將開始什么樣商業(yè)計劃?為什么?

              13.如果你能夠?qū)⑷澜绲碾娔X廠商集合在一個辦公室里,然后告訴他們將被強(qiáng)迫做一件事,那件事將是什么? 

             

            第三組  

              1.你讓工人為你工作7天,回報是一根金條,這個金條平分成相連的7段,你必須在每天結(jié)束的時候給他們一段金條。如果只允許你兩次把金條弄斷,你如何給你的工人付費?

              2.有一輛火車以每小時15公里的速度離開北京直奔廣州,同時另一輛火車每小時20公里的速度從廣州開往北京。如果有一只鳥,以30公里每小時的速度和兩輛火車同時啟動,從北京出發(fā),碰到另一輛車后就向相反的方向返回去飛,就這樣依次在兩輛火車之間來回地飛,直到兩輛火車相遇。請問,這只鳥共飛行了多長的距離?

              3.你有四個裝藥丸的罐子,每個藥丸都有一定的重量,被污染的藥丸是沒被污染的藥丸的重量+1。只稱量一次,如何判斷哪個罐子的藥被污染了?

              4.門外三個開關(guān)分別對應(yīng)室內(nèi)三盞燈,線路良好,在門外控制開關(guān)時候不能看到室內(nèi)燈的情況,現(xiàn)在只允許進(jìn)門一次,確定開關(guān)和燈的對應(yīng)關(guān)系?

              5.人民幣為什么只有1、2、5、10的面值?

              6.你有兩個罐子以及50個紅色彈球和50個藍(lán)色彈球,隨機(jī)選出一個罐子, 隨機(jī)選出一個彈球放入罐子,怎么給出紅色彈球最大的選中機(jī)會?在你的計劃里,得到紅球的幾率是多少?

              7.給你兩顆6面色子,可以在它們各個面上刻上0-9任意一個數(shù)字,要求能夠用它們拼出任意一年中的日期數(shù)值

              第四組 

              第一題 . 五個海盜搶到了100顆寶石,每一顆都一樣大小和價值連城。他們決定這么分:

              抽簽決定自己的號碼(1、2、3、4、5)

              首先,由1號提出分配方案,然后大家表決,當(dāng)且僅當(dāng)超過半數(shù)的人同意時,按照他的方案

              進(jìn)行分配,否則將被扔進(jìn)大海喂鯊魚

              如果1號死后,再由2號提出分配方案,然后剩下的4人進(jìn)行表決,當(dāng)且僅當(dāng)超過半數(shù)的人同

              意時,按照他的方案進(jìn)行分配,否則將被扔入大海喂鯊魚

              依此類推

              條件:每個海盜都是很聰明的人,都能很理智地做出判斷,從而做出選擇。

              問題:第一個海盜提出怎樣的分配方案才能使自己的收益最大化?

              第二題 . 一道關(guān)于飛機(jī)加油的問題,已知:

              每個飛機(jī)只有一個油箱,

              飛機(jī)之間可以相互加油(注意是相互,沒有加油機(jī))

              一箱油可供一架飛機(jī)繞地球飛半圈,

              問題:

              為使至少一架飛機(jī)繞地球一圈回到起飛時的飛機(jī)場,至少需要出動幾架飛機(jī)?(所有飛機(jī)從同一機(jī)場起飛,而且必須安全返回機(jī)場,不允許中途降落,中間沒有飛機(jī)場)第三題. 汽車加油問題  

              一輛載油500升的汽車從A開往1000公里外的B,已知汽車每公里耗油量為1升,A處有無窮多的油,其他任何地點都沒有油,但該車可以在任何地點存放油以備中轉(zhuǎn),問從A到B最少需要多少油

              第四題. 擲杯問題

              一種杯子,若在第N層被摔破,則在任何比N高的樓層均會破,若在第M層不破,則在任何比M低的樓層均會破,給你兩個這樣的杯子,讓你在100層高的樓層中測試,要求用最少的測試次數(shù)找出恰巧會使杯子破碎的樓層。

              第五題. 推理游戲

              教授選出兩個從2到9的數(shù),把它們的和告訴學(xué)生甲,把它們的積告訴學(xué)生乙,讓他們輪流猜這兩個數(shù)

              甲說:“我猜不出”

              乙說:“我猜不出”

              甲說:“我猜到了”

              乙說:“我也猜到了”

              問這兩個數(shù)是多少

              第六題. 病狗問題

              一個住宅區(qū)內(nèi)有100戶人家,每戶人家養(yǎng)一條狗,每天傍晚大家都在同一個地方遛狗。已知這些狗中有一部分病狗,由于某種原因,狗的主人無法判斷自己的狗是否是病狗,卻能夠分辨其他的狗是否有病,現(xiàn)在,上級傳來通知,要求住戶處決這些病狗,并且不允許指認(rèn)他人的狗是病狗(就是只能判斷自己的),過了7天之后,所有的病狗都被處決了,問,一共有幾只病狗?為什么?

              第八題. 監(jiān)獄里有100個房間,每個房間內(nèi)有一囚犯。一天,監(jiān)獄長說,你們獄房外有一電燈,你們在放風(fēng)時可以控制這個電燈(熄或亮)。每天只能有一個人出來放風(fēng),并且防風(fēng)是隨機(jī)的。如果在有限時間內(nèi),你們中的某人能對我說:“我敢保證,現(xiàn)在每個人都已經(jīng)至少放過一次風(fēng)了。”我就放了你們!問囚犯們要采取什么策略才能被監(jiān)獄長放掉?如果采用了這種策略,大致多久他們可以被釋放?

             

            第五組  

              1.某手機(jī)廠家由于設(shè)計失誤,有可能造成電池壽命比原來設(shè)計的壽命短一半(不是沖放電時間),解決方案就是免費更換電池或給50元購買該廠家新手機(jī)的折換券。請給所有已購買的用戶寫信告訴解決方案。

              2.一高層領(lǐng)導(dǎo)在參觀某博物館時,向博物館館員小王要了一塊明代的城磚作為紀(jì)念,按國家規(guī)定,任何人不得將博物館收藏品變?yōu)樗接?。博物館館長需要如何寫信給這位領(lǐng)導(dǎo),將城磚取回。

              3.營業(yè)員小姐由于工作失誤,將2萬元的筆記本電腦以1.2萬元錯賣給李先生,王小姐的經(jīng)理怎么寫信給李先生試圖將錢要回來?

              4.給你一款新研制的手機(jī),如果你是測試組的組長,你會如何測試?

              5.如何為函數(shù)int atoi(const char * pstr)編寫測試向量?

              第六組  

              1.鏈表和數(shù)組的區(qū)別在哪里?

              2.編寫實現(xiàn)鏈表排序的一種算法。說明為什么你會選擇用這樣的方法?

              3.編寫實現(xiàn)數(shù)組排序的一種算法。說明為什么你會選擇用這樣的方法?

              4.請編寫能直接實現(xiàn)char * strcpy(char * pstrDest,const char * pstrSource)函數(shù)功能的代碼。

              5.編寫反轉(zhuǎn)字符串的程序,要求優(yōu)化速度、優(yōu)化空間。

              6.在鏈表里如何發(fā)現(xiàn)循環(huán)鏈接?

              7.給出洗牌的一個算法,并將洗好的牌存儲在一個整形數(shù)組里。

              8.寫一個函數(shù),檢查字符是否是整數(shù),如果是,返回其整數(shù)值。(或者:怎樣只用4行代碼

              9.給出一個函數(shù)來輸出一個字符串的所有排列。

              10.請編寫實現(xiàn)void * malloc(int)內(nèi)存分配函數(shù)功能一樣的代碼。

              11.給出一個函數(shù)來復(fù)制兩個字符串A和B。字符串A的后幾個字節(jié)和字符串B的前幾個字節(jié)重疊。

              12.怎樣編寫一個程序,把一個有序整數(shù)數(shù)組放到二叉樹中?

              13.怎樣從頂部開始逐層打印二叉樹結(jié)點數(shù)據(jù)?請編程。

              14.怎樣把一個鏈表掉個順序(也就是反序,注意鏈表的邊界條件并考慮空鏈表)? --

              15.請編寫能直接實現(xiàn)int atoi(const char * pstr)函數(shù)功能的代碼

            -----------------------------------------------------------------------------------
            第一組題答案: 

              
              2)根據(jù)抽屜原理,4個

              3)3升裝滿;3升-〉5升(全注入);3升裝滿;3升-〉5升(剩1升);5升倒掉;3升-〉5升(注入1升);3升裝滿;3升-〉5升;完成(另:可用回溯法編程求解)

              4)問其中一人:另外一個人會說哪一條路是通往誠實國的?回答者所指的那條路必然是通往說謊國的。

              5)12個球:

              第一次:4,4 如果平了:

              那么剩下的球中取3放左邊,取3個好球放右邊,稱:

              如果左邊重,那么取兩個球稱一下,哪個重哪個是次品,平的話第三個重,是次品,輕的話同理

              如果平了,那么剩下一個次品,還可根據(jù)需要稱出次品比正品輕或者重

              如果不平:

              那么不妨設(shè)左邊重右邊輕,為了便于說明,將左邊4顆稱為重球,右邊4顆稱為輕球,剩下4顆稱為好球

              取重球2顆,輕球2顆放在左側(cè),右側(cè)放3顆好球和一顆輕球

              如果左邊重

              稱那兩顆重球,重的一個次品,平的話右邊輕球次品

              如果右邊重

              稱左邊兩顆輕球,輕的一個次品

              如果平

              稱剩下兩顆重球,重的一個次品,平的話剩下那顆輕球次品

              13個球:

              第一次:4,4,如果平了

              剩5顆球用上面的方法仍舊能找出次品,只是不能知道次品是重是輕

              如果不平,同上 

            6)  

              o o o

              o o o

              o o o

              7)

              23次,因為分針要轉(zhuǎn)24圈,時針才能轉(zhuǎn)1圈,而分針和時針重合兩次之間的間隔顯然>1小時,它們有23次重合機(jī)會,每次重合中秒針有一次重合機(jī)會,所以是23次

              重合時間可以對照手表求出,也可列方程求出

              8)

              在地球表面種樹,做一個地球內(nèi)接的正四面體,內(nèi)接點即為所求

              第二組 無標(biāo)準(zhǔn)答案  

              第三組 

              1. 分成1,2,4三段,第一天給1,第二天給2取回1,第3天給1,第4天給4取回1、2,第5天給1,第6天給2取回1,第七天給1

              2. 求出火車相遇時間,鳥速乘以時間就是鳥飛行的距離

              3. 四個罐子中分別取1,2,3,4顆藥丸,稱出比正常重多少,即可判斷出那個罐子的藥被污染

              4. 三個開關(guān)分別:關(guān),開,開10分鐘,然后進(jìn)屋,暗且涼的為開關(guān)1控制的燈,亮的為開關(guān)2控制的燈,暗且熱的為開關(guān)3控制的燈

              5. 因為可以用1,2,5,10組合成任何需要的貨幣值,日常習(xí)慣為10進(jìn)制

              6. 題意不理解...*_*

              7. 012345 0126(9)78

              第四組 都是很難的題目  

              第一題:97 0 1 2 0 或者 97 0 1 0 2 (提示:可用逆推法求出)

              第二題:3架飛機(jī)5架次,飛法:

              ABC 3架同時起飛,1/8處,C給AB加滿油,C返航,1/4處,B給A加滿油,B返航,A到達(dá)1/2處,C從機(jī)場往另一方向起飛,3/4處,C同已經(jīng)空油箱的A平分剩余油量,同時B從機(jī)場起飛,AC到7/8處同B平分剩余油量,剛好3架飛機(jī)同時返航。所以是3架飛機(jī)5架次。第三題:需要建立數(shù)學(xué)模型  

              (提示,嚴(yán)格證明該模型最優(yōu)比較麻煩,但確實可證,大膽猜想是解題關(guān)鍵)

              題目可歸結(jié)為求數(shù)列 an=500/(2n+1) n=0,1,2,3......的和Sn什么時候大于等于1000,解得n>6

              當(dāng)n=6時,S6=977.57

              所以第一個中轉(zhuǎn)點離起始位置距離為1000-977.57=22.43公里

              所以第一次中轉(zhuǎn)之前共耗油 22.43*(2*7+1)=336.50升

              此后每次中轉(zhuǎn)耗油500升

              所以總耗油量為7*500+336.50=3836.50升

              第四題:需要建立數(shù)學(xué)模型

              題目可歸結(jié)為求自然數(shù)列的和S什么時候大于等于100,解得n>13

              第一個杯子可能的投擲樓層分別為:14,27,39,50,60,69,77,84,90,95,99,100

              第五題:3和4(可嚴(yán)格證明)

              設(shè)兩個數(shù)為n1,n2,n1>=n2,甲聽到的數(shù)為n=n1+n2,乙聽到的數(shù)為m=n1*n2

              證明n1=3,n2=4是唯一解

              證明:要證以上命題為真,不妨先證n=7

              1)必要性:

              i) n>5 是顯然的,因為n<4不可能,n=4或者n=5甲都不可能回答不知道

              ii) n>6 因為如果n=6的話,那么甲雖然不知道(不確定2+4還是3+3)但是無論是2,4還是3,3乙都不可能說不知道(m=8或者m=9的話乙說不知道是沒有道理的)

              iii) n<8 因為如果n>=8的話,就可以將n分解成 n=4+x 和 n=6+(x-2),那么m可以是4x也可以是6(x-2)而4x=6(x-2)的必要條件是x=6即n=10,那樣n又可以分解成8+2,所以總之當(dāng)n>=8時,n至少可以分解成兩種不同的合數(shù)之和,這樣乙說不知道的時候,甲就沒有理由馬上說知道。

              以上證明了必要性

              2)充分性

              當(dāng)n=7時,n可以分解成2+5或3+4

              顯然2+5不符合題意,舍去,容易判斷出3+4符合題意,m=12,證畢

              于是得到n=7 m=12 n1=3 n2=4是唯一解。第六題:7只(數(shù)學(xué)歸納法證明)  

              1)若只有1只病狗,因為病狗主人看不到有其他病狗,必然會知道自己的狗是病狗(前提是一定存在病狗),所以他會在第一天把病狗處決。

              2)設(shè)有k只病狗的話,會在第k天被處決,那么,如果有k+1只,病狗的主人只會看到k只病狗,而第k天沒有人處決病狗,病狗主人就會在第k+1天知道自己的狗是病狗,于是病狗在第k+1天被處決

              3)由1)2)得,若有n只病狗,必然在第n天被處決

              第八題:

              約定好一個人作為報告人(可以是第一個放風(fēng)的人)

              規(guī)則如下:

              1、報告人放風(fēng)的時候開燈并數(shù)開燈次數(shù)

              2、其他人第一次遇到開著燈放風(fēng)時,將燈關(guān)閉

              3、當(dāng)報告人第100次開燈的時候,去向監(jiān)獄長報告,要求監(jiān)獄長放人......

              按照概率大約30年后(10000天)他們可以被釋放

              第五組無標(biāo)準(zhǔn)答案  

              第六組部分題參考答案:  

              4.

            char * strcpy(char * pstrDest,const char * pstrSource)
            {
             assert((pstrDest!=NULL)&&(pstrSource!=NULL)); 
             char * pstr=pstrDest;
             while((*(pstrDest++)=*(pstrSource++))!='\0');
                    return pstr;
            }
             


              5.

            char * strrev(char * pstr)
            {
             assert(pstr!=NULL);
             
             char * p=pstr;
             char * pret=pstr;
             while(*(p++)!='\0');
             p--;
             char tmp;
             while(p>pstr)
             {
              tmp=*p;
              *(p--)=*(pstr);
              *(pstr++)=tmp;  
             }
             return pret;

            百度筆試題:
            IP段格式:ip1 ip2。之間以空格分開,ip形式為X.X.X.X,數(shù)據(jù)保存在文件中,文件不超過2k行,無序?,F(xiàn)在要求編寫算法去掉可重IP,可重有三種形式:包含、交疊、緊靠。

            例如,文件內(nèi)容為:
            10.0.0.0 10.0.0.12
            10.0.0.5 10.0.0.10    ( <= 包含)
            10.0.0.8 10.0.0.15    ( <= 交疊)
            10.0.0.15 10.0.0.24   ( <= 緊靠)

            最后輸出為:
            10.0.0.0 10.0.0.24

            code:
            /*
            **這個函數(shù)的作用是將文件中的一行對應(yīng)的兩個數(shù)據(jù)轉(zhuǎn)換成整形的數(shù)據(jù)
            **比如把10.0.0.0 10.0.0.12 轉(zhuǎn)換后,left=10*224,就是10.0.0.0對應(yīng)的整數(shù),每個數(shù)字對應(yīng)8位,right=left+12
            */
            void ParseLine( char line[], size_t length, unsigned int &left, unsigned int &right)
            {
                size_t i;
                for( i=0; i<length; i++ )
                {
                    if ( line[i]=='.' || line[i]==' ' )//將點變成0
                    {
                        line[i]=0;
                    }
                }
                char *p   = (char*)&left;
                char *num = line;
                for( i=3; i<4; --i ) //size是size_t,而size_t是unsigned int,所以i=0再自減后變成了最大的整數(shù),循環(huán)就會終止
                {
             // cout<<i<<",";
                    *(p+i) = strtol( num, &num  ,10 );
                    cout<<static_cast<int>(*(p+i))<<",";
                    ++num;
             // cout<<num<<":";
                }
                cout<<endl;
                p = (char*)&right;
                for( i=3; i<4; --i )
                {
                    *(p+i) = strtol( num, &num, 10 );
                    ++num;
                }
            }


            void UniqueSequence(  vector<unsigned int> & uSeq, unsigned int left, unsigned int right )
            {
                size_t i, lPos=-1, rPos=-1;
                for( i=0; i<uSeq.size(); i++ )
                {
                    if( left <= uSeq.at(i)  )
                    {
                        lPos = i;
                        break;
                    }
                }
                for( ;i<uSeq.size(); i++ )
                {
                    if( right<=uSeq.at(i) )
                    {
                        rPos=i;
                        break;
                    }
                }
                if( lPos == -1 )
                {
                    uSeq.push_back( left );
                    uSeq.push_back( right );   
                    return;
                }

                if( lPos%2 == 0 )
                {
                    if(  uSeq.at(lPos)==left )
                    {   
                    }
              else
                    {
                        uSeq.insert( uSeq.begin()+lPos, left );
                    }
                }
             else
                {
                    --lPos;
                }
                if( rPos == -1 )
                {
                    uSeq.erase( uSeq.begin()+(lPos+1), uSeq.end() );
                    uSeq.push_back(right);
                }
             else if(  rPos%2 == 0  )
                {
                    if( uSeq.at(rPos)== right )
                    {
                        uSeq.erase( uSeq.begin()+(lPos+1), uSeq.begin()+(rPos+1) );
                    }
              else
                    {
                        uSeq.erase( uSeq.begin()+(lPos+1), uSeq.begin()+rPos );
                        uSeq.insert( uSeq.begin()+rPos, right  );
                    }
                }
             else
                {
                    uSeq.erase( uSeq.begin()+(lPos+1), uSeq.begin()+rPos );
                }
            }


            void PrintIP( unsigned int num )
            {
                char *p = (char*)&num;
                for( size_t i=3;i>0; --i)
                {
                    cout<< (int)p[i]<<".";
                }
                cout<<(int)p[0];
            }

            #define MAX_BUFFER_LENGTH 100
            int main()
            {
                unsigned int left, right;
                char buffer[MAX_BUFFER_LENGTH];
                ifstream infile( "test.txt" );
                if( infile.fail() )
                {
                    return 0;
                }
                vector<unsigned int> uSeq;
                while( infile.getline(buffer, MAX_BUFFER_LENGTH) )
                {
                    ParseLine(buffer, strlen(buffer), left, right);
             // cout<<left<<","<<right<<endl;
                    UniqueSequence( uSeq, left, right );
              for( size_t i=0; i<uSeq.size(); i+=2 )
                {
                    PrintIP(uSeq.at(i) );
                    cout<<"  ";
                    PrintIP(uSeq.at(i+1));
                    cout<<endl;
                }
              cout<<endl;
                }
                for( size_t i=0; i<uSeq.size(); i+=2 )
                {
                    PrintIP(uSeq.at(i) );
                    cout<<"  ";
                    PrintIP(uSeq.at(i+1));
                    cout<<endl;
                }
                return 0;
            }

            /*long strtol( const char *nptr, char **endptr, int base ),其中nptr是以NULL結(jié)尾字符串,endptr是字符串停止掃描的地方(Pointer to character that stops scan),strtol returns the value represented in the string nptr,The strtol function converts nptr to a long. strtol stops reading the string nptr at the first character it cannot recognize as part of a number. This may be the terminating null character, or it may be the first numeric character greater than or equal to base.
            string = "-10110134932This stopped it";
              l = strtol( string, &stopstring, 10 );
              printf( "string = %s", string );
              printf("   strtol = %ld", l );
              printf("   Stopped scan at: %s", stopstring );
              string = "10110134932";
              printf( "string = %s\n", string );
              /* Convert string using base 2, 4, and 8: */
              for( base = 2; base <= 8; base *= 2 )
              {
                 /* Convert the string: */
                 ul = strtoul( string, &stopstring, base );
                 printf( "   strtol = %ld (base %d)\n", ul, base );
                 printf( "   Stopped scan at: %s\n", stopstring );
              }
            打印的結(jié)果是:
            string = -10110134932This stopped it   strtol = -2147483647   Stopped scan at: This stopped itstring = 10110134932
              strtol = 45 (base 2)
              Stopped scan at: 34932
              strtol = 4423 (base 4)
              Stopped scan at: 4932
              strtol = 2134108 (base 8)
              Stopped scan at: 932
            */

            5.如果存在兩個變量:a和b,不使用“if”、“?:”、 “switch”和其它的判斷語句,找出兩個數(shù)中的最大值。
                  答案:( ( a + b ) + abs( a - b ) ) / 2

            6. 寫一個函數(shù)找出一個整數(shù)數(shù)組中,第二大的數(shù) (microsoft)
                   const int MINNUMBER = -32767 ;
                   int find_sec_max( int data[] , int count)
                   {
                            int maxnumber = data[0] ;
                            int sec_max = MINNUMBER ;
                            for ( int i = 1 ; i < count ; i++)
                            {
                                if ( data[i] > maxnumber )
                                {
                                     sec_max = maxnumber ;
                                     maxnumber = data[i] ;
                                }
                                else
                                {
                                         if ( data[i] > sec_max )
                                                 sec_max = data[i] ;
                                }
                            }
                            return sec_max ;
                    }

            posted on 2008-02-18 13:26 夢在天涯 閱讀(6261) 評論(3)  編輯 收藏 引用 所屬分類: interview

            評論

            # re: 筆試題二(轉(zhuǎn)) 2008-02-24 17:41 daids

            很好很強(qiáng)大  回復(fù)  更多評論   

            # re: 筆試題二(轉(zhuǎn))[未登錄] 2008-05-26 13:07 flyswift

            郁悶,好多都沒答上啊  回復(fù)  更多評論   

            # re: 筆試題二(轉(zhuǎn)) 2010-02-25 16:00 forzafeng

            第三組第三題答案錯了~~~  回復(fù)  更多評論   

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804607
            • 排名 - 5

            最新評論

            閱讀排行榜

            香蕉久久久久久狠狠色| 日韩AV无码久久一区二区 | 亚洲欧美国产精品专区久久| 香蕉久久永久视频| 精品少妇人妻av无码久久| 精品国产综合区久久久久久| 久久人人爽人人爽人人片AV东京热 | 久久99国产乱子伦精品免费| 国产成人AV综合久久| 久久久一本精品99久久精品88| 久久ZYZ资源站无码中文动漫 | 久久久噜噜噜久久熟女AA片 | 亚洲成色WWW久久网站| 久久亚洲精品视频| 亚洲国产精品无码久久| 免费一级做a爰片久久毛片潮| 99re这里只有精品热久久| 武侠古典久久婷婷狼人伊人| 久久福利青草精品资源站免费 | 99久久人人爽亚洲精品美女| 亚洲国产精品无码久久| 中文字幕久久亚洲一区| 大香网伊人久久综合网2020| 99久久99这里只有免费费精品 | 婷婷综合久久狠狠色99h| 午夜精品久久久久久毛片| 久久天天躁狠狠躁夜夜2020老熟妇| 久久精品国产亚洲av高清漫画| 久久久久亚洲国产| 色综合久久中文字幕综合网| 狠狠人妻久久久久久综合| 久久91精品国产91久久小草| 久久99精品久久久久婷婷| 成人午夜精品无码区久久| 久久丫忘忧草产品| 精品综合久久久久久97| 久久免费看黄a级毛片| 亚洲精品无码久久一线| 一本色道久久88精品综合| 亚洲欧美日韩中文久久| 色88久久久久高潮综合影院|