A. 某軟體公司的筆試時的邏輯題!!有誰能都答對啊
1\到開關房間,打開開關A,過一段時間(5~10分鍾),關掉A,打開開關B,再到電燈房間,這時開著的燈為B開關控制的,用手摸量外兩個關著的燈,熱的是A控制的,冷的是C控制的.
2\這種演算法是錯誤的,小工拿走的20元錢是從三人實際交得420元錢中拿的,所以這20元錢是重復計算的,不應該相加.
正確的演算法有,
A 如果算實交金額,三人每人拿了140元,實交420元,這與原本叫了450元,後拿到退款30,是相同的.
B 如果算旅店實收,則三人共實交了420元,被小工拿走20元,旅店實收400元,這與原本交了450元,後被老闆退掉50元,實收400元相符.
3. 賺了2元.總指出為9+11,總收入為10+12
樓上的言簡意賅,比我的好
B. 去軟體公司筆試的問題
不過是公司選人的一個流程,只要智商正常,問題應該不會很大。當然為了筆試需要,可以筆試前多做些類似的測試題,其中有些問題的答案是有規律的。
C. 昨天去面試中科創達軟體科技有限公司,然後進行了筆試和hr面試,筆試
就是培訓機構,換了個馬甲而已。網上的都是他們自問自答的,肯定好了。
D. 有一道應聘文案策劃的筆試題
抱歉,最近比較忙,簡單回答,有空再補~
一、開館前的廣告宣傳
報紙、廣播、網路、DM宣傳單等等(廣告策劃方案,包括媒體策略了)
二、開館之日媒體報道
開館活動之日邀請報紙、電台、電視台、網路媒體,以新聞報道形式突出報道開館盛典。(媒介)
三、開館活動策劃方案
1、活動簡述:
2、活動主題:以何為主?
3、活動時間:持續時間?
4、活動內容:比如表演、剪綵儀式、講座 、互動、晚宴等等,
6、流程安排:以活動順序
7、現場布置:
8、活動執行:成立項目小組之類的,媒介負責媒體接待什麼的。
9、費用預算:投入產出。
四、工作安排:
前期工作:確定邀請人,(文化部等、藝術家等)、聯系媒體……
中期工作:活動准備(購買相關用品,館內布置、各事項協調等……
後期工作:持續宣傳、效果評估等……
細展開的要寫幾天,比如場館布置:音箱、彩旗、氣球、橫幅、簽到本、紅色地毯等
活動策劃應考慮很多東西:包括:禮儀隊、展示品、主持人、領導致辭等等
需要全面考慮,環環相扣。
E. 創業軟體股份有限公司怎麼樣
很中肯的話:創業軟體的員工都在叫,出了創業的大門其他公司都在要~ 上下班隨意的都不會喊,周末加班的喊不停~ 出差出在家門口的上班不超過2里路,出差出在山溝溝的公司管不住~ 其他待編!
F. 各大公司筆試題及答案
騰訊筆試題:const的含義及實現機制
const的含義及實現機制,比如:const int i,是怎麼做到i只可讀的?
const用來說明所定義的變數是只讀的。
這些在編譯期間完成,編譯器可能使用常數直接替換掉對此變數的引用。
更多閱讀:
http://www.92ask.net/Archive/?action=show&id=18
初探編譯器static、const之實現原理
騰訊筆試題:買200返100優惠券,實際上折扣是多少?
到商店裡買200的商品返還100優惠券(可以在本商店代替現金)。請問實際上折扣是多少?
由於優惠券可以代替現金,所以可以使用200元優惠券買東西,然後還可以獲得100元的優惠券。
假設開始時花了x元,那麼可以買到 x + x/2 + x/4 + ...的東西。所以實際上折扣是50%.(當然,大部分時候很難一直兌換下去,所以50%是折扣的上限)
如果使用優惠券買東西不能獲得新的優惠券,那麼
總過花去了200元,可以買到200+100元的商品,所以實際折扣為 200/300 = 67%.
騰訊筆試題:tcp三次握手的過程,accept發生在三次握手哪個階段?
accept發生在三次握手之後。
第一次握手:客戶端發送syn包(syn=j)到伺服器。
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個ASK包(ask=k)。
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1)。
三次握手完成後,客戶端和伺服器就建立了tcp連接。這時可以調用accept函數獲得此連接。
騰訊筆試題:用UDP協議通訊時怎樣得知目標機是否獲得了數據包
用UDP協議通訊時怎樣得知目標機是否獲得了數據包?
可以在每個數據包中插入一個唯一的ID,比如timestamp或者遞增的int。
發送方在發送數據時將此ID和發送時間記錄在本地。
接收方在收到數據後將ID再發給發送方作為回應。
發送方如果收到回應,則知道接收方已經收到相應的數據包;如果在指定時間內沒有收到回應,則數據包可能丟失,需要重復上面的過程重新發送一次,直到確定對方收到。
關於UDP協議的簡單介紹,可以參考
http://ke..com/view/30509.htm
騰訊筆試題:統計論壇在線人數分布
求一個論壇的在線人數,假設有一個論壇,其注冊ID有兩億個,每個ID從登陸到退出會向一個日誌文件中記下登陸時間和退出時間,要求寫一個演算法統計一天中論壇的用戶在線分布,取樣粒度為秒。
一天總共有 3600*24 = 86400秒。
定義一個長度為86400的整數數組int delta[86400],每個整數對應這一秒的人數變化值,可能為正也可能為負。開始時將數組元素都初始化為0。
然後依次讀入每個用戶的登錄時間和退出時間,將與登錄時間對應的整數值加1,將與退出時間對應的整數值減1。
這樣處理一遍後數組中存儲了每秒中的人數變化情況。
定義另外一個長度為86400的整數數組int online_num[86400],每個整數對應這一秒的論壇在線人數。
假設一天開始時論壇在線人數為0,則第1秒的人數online_num[0] = delta[0]。第n+1秒的人數online_num[n] = online_num[n-1] + delta[n]。
這樣我們就獲得了一天中任意時間的在線人數。
騰訊筆試題:從10G個數中找到中數
在一個文件中有 10G 個整數,亂序排列,要求找出中位數。內存限制為 2G。
不妨假設10G個整數是64bit的。
2G內存可以存放256M個64bit整數。
我們可以將64bit的整數空間平均分成256M個取值范圍,用2G的內存對每個取值范圍內出現整數個數進行統計。這樣遍歷一邊10G整數後,我們便知道中數在那個范圍內出現,以及這個范圍內總共出現了多少個整數。
如果中數所在范圍出現的整數比較少,我們就可以對這個范圍內的整數進行排序,找到中數。如果這個范圍內出現的整數比較多,我們還可以採用同樣的方法將此范圍再次分成多個更小的范圍(256M=2^28,所以最多需要3次就可以將此范圍縮小到1,也就找到了中數)。
騰訊筆試題:兩個整數集合A和B,求其交集
兩個整數集合A和B,求其交集。
1. 讀取整數集合A中的整數,將讀到的整數插入到map中,並將對應的值設為1。
2. 讀取整數集合B中的整數,如果該整數在map中並且值為1,則將此數加入到交集當中,並將在map中的對應值改為2。
通過更改map中的值,避免了將同樣的值輸出兩次。
騰訊筆試題:找出1到10w中沒有出現的兩個數字
有1到10w這10w個數,去除2個並打亂次序,如何找出那兩個數?
申請10w個bit的空間,每個bit代表一個數字是否出現過。
開始時將這10w個bit都初始化為0,表示所有數字都沒有出現過。
然後依次讀入已經打亂循序的數字,並將對應的bit設為1。
當處理完所有數字後,根據為0的bit得出沒有出現的數字。
首先計算1到10w的和,平方和。
然後計算給定數字的和,平方和。
兩次的到的數字相減,可以得到這兩個數字的和,平方和。
所以我們有
x + y = n
x^2 + y^2 = m
解方程可以得到x和y的值。
騰訊筆試題:需要多少只小白鼠才能在24小時內找到毒葯
有1000瓶水,其中有一瓶有毒,小白鼠只要嘗一點帶毒的水24小時後就會死亡,至少要多少只小白鼠才能在24小時時鑒別出那瓶水有毒?
最容易想到的就是用1000隻小白鼠,每隻喝一瓶。但顯然這不是最好答案。
既然每隻小白鼠喝一瓶不是最好答案,那就應該每隻小白鼠喝多瓶。那每隻應該喝多少瓶呢?
首先讓我們換種問法,如果有x只小白鼠,那麼24小時內可以從多少瓶水中找出那瓶有毒的?
由於每隻小白鼠都只有死或者活這兩種結果,所以x只小白鼠最大可以表示2^x種結果。如果讓每種結果都對應到某瓶水有毒,那麼也就可以從2^x瓶水中找到有毒的那瓶水。那如何來實現這種對應關系呢?
第一隻小白鼠喝第1到2^(x-1)瓶,第二隻小白鼠喝第1到第2^(x-2)和第2^(x-1)+1到第2^(x-1) + 2^(x-2)瓶....以此類推。
回到此題,總過1000瓶水,所以需要最少10隻小白鼠。
騰訊筆試題:根據上排的數填寫下排的數,並滿足要求。
根據上排給出十個數,在其下排填出對應的十個數, 要求下排每個數都是上排對應位置的數在下排出現的次數。上排的數:0,1,2,3,4,5,6,7,8,9。
騰訊筆試題:判斷數字是否出現在40億個數中?
給40億個不重復的unsigned int的整數,沒排過序的,然後再給幾個數,如何快速判斷這幾個數是否在那40億個數當中?
答案:
unsigned int 的取值范圍是0到2^32-1。我們可以申請連續的2^32/8=512M的內存,用每一個bit對應一個unsigned int數字。首先將512M內存都初始化為0,然後每處理一個數字就將其對應的bit設置為1。當需要查詢時,直接找到對應bit,看其值是0還是1即 可。
1、請定義一個宏,比較兩個數a、b的大小,不能使用大於、小於、if語句#define Max(a,b) ( a/b)?a:b
2、如何輸出源文件的標題和目前執行行的行數
int line = __LINE__;
char *file = __FILE__;
cout<<"file name is "<<(file)<<",line is "<
3、兩個數相乘,小數點後位數沒有限制,請寫一個高精度演算法
4、寫一個病毒
while (1)
{
int *p = new int[10000000];
}
5、不使用額外空間,將 A,B兩鏈表的元素交*歸並
6、將樹序列化 轉存在數組或 鏈表中
struct st{
int i;
short s;
char c;
};
sizeof(struct st);
7、
char * p1;
void * p2;
int p3;
char p4[10];
sizeof(p1...p4) =?
8、
4,4,4,10
二分查找
快速排序
雙向鏈表的刪除結點
面試基本上都是和項目相關的,並當場說幾個程序題的輸出,不能用草稿紙
微軟筆試題:寫程序找出二叉樹的深度
一個樹的深度等於max(左子樹深度,右子樹深度)+1。可以使用遞歸實現。
假設節點為定義為
1. struct Node {
2. Node* left;
3. Node* right;
4. };
5. int GetDepth(Node* root) {
6. if (NULL == root) {
7. return 0;
8. }
9. int left_depth = GetDepth(root->left);
10. int right_depth = GetDepth(root->right);
11. return left_depth > right_depth ? left_depth + 1 : right_depth + 1;
12. }
微軟筆試題:利用天平砝碼,三次將140克的鹽 分成50、90克兩份?
有一個天平,2克和7克砝碼各一個。如何利用天平砝碼在三次內將140克鹽分成50,90克兩份。
第一種方法:
第一次:先稱 7+2克鹽 (相當於有三個法碼2,7,9)
第二次:稱2+7+9=18克鹽 (相當於有2,7,9,18四個法碼)
第三次:稱7+18=x+2,得出x是23,23+9+18=50克鹽.
剩下就是90克了.
第二種方法:
1.先把140克鹽分為兩份,每份70克
2.在把70克分為兩份,每份35克
3.然後把兩個砝碼放在天平兩邊,把35克麵粉分成兩份也放在兩邊(15+7=20+2)
現在有四堆麵粉70,35,15,20,分別組合得到
70+20=90
35+15=50
微軟筆試題:地球上有多少個滿足這樣條件的點
站在地球上的某一點,向南走一公里,然後向東走一公里,最後向北走一公里,回到了原點。地球上有多少個滿足這樣條件的點?
北極點滿足這個條件。
距離南極點很近的一個圈上也滿足這個條件。在這個圓圈上,向南走一公里,然後向東走一公里恰好繞南極點一圈,向北走一公里回到原點。
所以地球上總共有無數點滿足這個條件。
或者
首先,在地球表面上,南北走向是沿著經度方向,東西是沿著緯度方向。如果你一直往北走就會達到北極點,往南走就到了南極點。因此,向南走一公里,然 後向東走一公里,最後向北走一公里,回到了原點,一種情況就是,出發點是在北極點,這樣向南走一公里,然後向東走任意幾公里,最後向北走一公里,最後都會 回到北極點;
其次,可以這么認為如果從A點向南走一公里到達B點,那麼若向東走一公里能回到B,那麼最後向北走一公里,就能回到了原點A。這樣就可以先找出在南 北極點附近找出繞一周只有1公里的圈,那麼這個圈落在南極附近時,只要往北推1公里,此時該圈上的點都能滿足;若這個圈落在北極附近時,能不能往北推1公 里我就不分析了。反正在南極附近能找到任意多個點就能回到這個問題了
微軟筆試題:正確標注水果籃
有三個水果籃。其中一個裡面只有蘋果,一個裡面只有橘子,另外一個既有蘋果又有橘子。每個水果籃上都有標簽,但標簽都是錯的。如何檢查某個水果籃中的一個水果,然後正確標注每個水果籃?
從標注成既有蘋果也有橘子的水果籃中選取一個進行檢查。
如果是橘子,則此籃中只有橘子;標有橘子的水果籃中只有蘋果;標有蘋果的水果籃中既有蘋果也有橘子。
如果是蘋果,則此籃中只有蘋果;標有蘋果的水果籃中只有橘子;標有橘子的水果籃中既有蘋果也有橘子。
微軟筆試題:不利用浮點運算,畫一個圓
不利用浮點運算,在屏幕上畫一個圓 (x**2 + y**2 = r**2,其中 r 為正整數)。
考慮到圓的對稱性,我們只需考慮第一象限即可。
等價於找到一條連接點(0,r)到點(r,0)的一條曲線,曲線上的點距圓心(0,0)的距離最接近 r。
我們可以從點(0,r)開始,搜索右(1,r),下(0,r-1),右下(1,r-1)三個點到圓心的距離,選擇距圓心距離最接近 r 的點作為下一個點。反復進行這種運算,直至到達點(r,0)。
由於不能利用浮點運算,所以距離的比較只能在距離平方的基礎上進行。也就是比較 x**2 + y**2 和 r**2之間的差值。
微軟筆試題:將一個句子按單詞反序
將一個句子按單詞反序。比如 「hi com mianshiti」,反序後變為 「mianshiti com hi」。
可以分兩步走:
第一步按找字母反序,「hi com mianshiti」 變為 「itihsnaim moc udiab ih」。
第二部將每個單詞中的字母反序,「itihsnaim moc udiab ih」 變成 「mianshiti com hi」。
這個方法可以在原字元串上進行,只需要幾個整數變數來保持指針即可,空間復雜度低。
微軟筆試題:計算n bit的整數中有多少bit 為1
設此整數為x。
方法1:
讓此整數除以2,如果余數為1,說明最後一位是1,統計值加1。
將除得的結果進行上面運算,直到結果為0。
方法2:
考慮除法復雜度有些高,可以使用移位操作代替除法。
將 x 和 1 進行按位與操作(x&1),如果結果為1,說明最後一位是1,統計值加1。
將x 向右一位(x >> 1),重復上面過程,直到移位後結果為0。
方法3:
如果需要統計很多數字,並且內存足夠大,可以考慮將每個數對應的bit為1的數量記錄下來,這樣每次計算只是一次查找操作。
1. int n = 0;while (x)
2. {
3. xx = x & (x - 1);
4. n++;
5. }
6. return n;
微軟筆試題:快速求取一個整數的7倍
乘法相對比較慢,所以快速的方法就是將這個乘法轉換成加減法和移位操作。
可以將此整數先左移三位(×8)然後再減去原值:X << 3 - X。
微軟筆試題:判斷一個數是不是2的n次冪
設要判斷的數是無符號整數X。
首先判斷X是否為0,如果為0則不是2的n次冪,返回。
X和X-1進行按位與操作,如果結果是0,則說明這個數是2的n次冪;如果結果非0,則說明這個數不是2 的n次冪。
證明:
如果是2的n次冪,則此數用二進製表示時只有一位是1,其它都是0。減1後,此位變成0,後面的位變成1,所以按位與後結果是0。
如果不是2的n次冪,則此數用二進製表示時有多位是1。減1後,只有最後一個1變成0,前面的 1還是1,所以按位與後結果不是0。
微軟筆試題:三隻螞蟻不相撞的概率是多少
在三角形的三個頂點上各有一隻螞蟻,它們向另一個頂點運動,目標隨機(可能為另外兩個頂點的任意一個)。問三隻螞蟻不相撞的概率是多少?
如果螞蟻順時針爬行記為0,逆時針爬行記為1。那麼三隻螞蟻的狀態可能為000,001,...,110,111中的任意一個,且為每種狀態的概率相等。在這8種狀態中,只有000和111可以避免相撞,所以螞蟻不相撞的概率是1/4。
微軟筆試題:判斷數組中是否包含重復數字
給定一個長度為N的數組,其中每個元素的取值范圍都是1到N。判斷數組中是否有重復的數字。(原數組不必保留)
給定一個長度為N的數組,其中每個元素的取值范圍都是1到N。判斷數組中是否有重復的數字。(原數組不必保留)
微軟筆試題:如何將蛋糕切成相等的兩份
一塊長方形的蛋糕,其中有一個小長方形的空洞(角度任意)。使用一把直刀,如何一刀將蛋糕切成相等的兩份?
通過長方形中心的的任意直線都能將長方形等分,所以連接兩個長方形的中心點的直線可以等分這個蛋糕。
一個沒有排序的鏈表,比如list={a,l,x,b,e,f,f,e,a,g,h,b,m},請去掉重復項,並保留原順序,以上鏈表去掉重復項後為newlist={a,l,x,b,e,f,g,h,m},請寫出一個高效演算法(時間比空間更重要)。
建立一個hash_map,key為鏈表中已經遍歷的節點內容,開始時為空。
從頭開始遍歷鏈表中的節點:
- 如果節點內容已經在hash_map中存在,則刪除此節點,繼續向後遍歷;
- 如果節點內容不在hash_map中,則保留此節點,將節點內容添加到hash_map中,繼續向後遍歷。
微軟筆試題:小明一家5口如何過橋?
小明一家過一座橋,過橋時是黑夜,所以必須有燈。現在小明過橋要1秒,小明的弟弟要3秒,小明的爸爸要6秒,小明的媽媽要8秒,小明的爺爺要12秒。每次此橋最多可過兩人,而過橋的速度依過橋最慢者而定,而且燈在點燃後30秒就會熄滅。問:小明一家如何過橋?
小明與弟弟過去,小明回來,用4s;
媽媽與爺爺過去,弟弟回來,用15s;
小明與弟弟過去,小明回來,用4s;
小明與爸爸過去,用6s;
總共用29s。
題目的關鍵是讓速度差不多的一起走,免得過於拖累較快的一個人。
微軟筆試題:編一個程序求質數的和
編一個程序求質數的和,例如F(7) = 2+3+5+7+11+13+17=58。
方法1:
對於從2開始的遞增整數n進行如下操作:
用 [2,n-1] 中的數依次去除n,如果余數為0,則說明n不是質數;如果所有餘數都不是0,則說明n是質數,對其進行加和。
空間復雜度為O(1),時間復雜度為O(n^2),其中n為需要找到的最大質數值(例子對應的值為17)。
方法2:
可以維護一個質數序列,這樣當需要判斷一個數是否是質數時,只需判斷是否能被比自己小的質數整除即可。
對於從2開始的遞增整數n進行如下操作:
用 [2,n-1] 中的質數(2,3,5,7,開始時此序列為空)依次去除n,如果余數為0,則說明n不是質數;如果所有餘數都不是0,則說明n是質數,將此質數加入質數序列,並對其進行加和。
空間復雜度為O(m),時間復雜度為O(mn),其中m為質數的個數(例子對應的值為7),n為需要找到的最大質數值(例子對應的值為17)。
方法3:
也可以不用除法,而用加法。
申請一個足夠大的空間,每個bit對應一個整數,開始將所有的bit都初始化為0。
對於已知的質數(開始時只有2),將此質數所有的倍數對應的bit都改為1,那麼最小的值為0的bit對應的數就是一個質數。對新獲得的質數的倍數也進行標注。
對這樣獲得的質數序列累加就可以獲得質數和。
空間復雜度為O(n),時間負責度為O(n),其中n為需要找到的最大質數值(例子對應的值為17)。
G. 華為筆試題
import java.util.Scanner;
public class HuiWen {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//控制台輸入
System.out.print("請輸入初始數值:");
Scanner in=new Scanner(System.in);
int initNum = in.nextInt();
int i = 1;
int temp = initNum;
while(i < 8){
temp += Integer.parseInt(new StringBuilder(temp+"").reverse().toString());
if(isHuiWen(temp)){
System.out.println("第 "+ i +" 次計算返回迴文 : " + temp);
return;
}
i++;
}
System.out.println("經7次計算後無迴文結果 : 0");
}
/**
* 迴文判斷
* @int number
*/
public static boolean isHuiWen(int number){
if(number == Integer.parseInt(new StringBuilder(number+"").reverse().toString())){
return true;
}
return false;
}
}