阿里巴巴後端預熱題,秋招第一波筆試的悲慘遭遇。

做爲一名軟件工程的本科生,滿懷熱情的投了各大公司的簡歷。ios

今天早上興致勃勃的作了阿里巴巴後端開發的第一道預熱題。後端

 

通過一番掙扎,我覺着,題目出的不夠嚴謹,而且測試用例也出現錯誤了。測試

 

題目描述以下。spa

 

 

 

幼兒園有10個小朋友,把1 – 20中全部奇數數字的卡片分別發給這20個小朋友。
集合的時候小朋友們排成一排,組成一個由數字組成的字符串,如35971315….11917,
可是老師發現少了一個小朋友,你能幫忙找出少掉的那個小朋友嗎?3d

輸入:
數字組成的字符串
輸出:
缺失的那個數字
輸入範例:
359713159151191
輸出範例:
3code

 

 

這道題限時40分鐘,要求只能用C++來編寫。開始拿到題10多分鐘我就有了思路。blog

捋一下思慮:後端開發

幼兒園有10個小朋友!!10個!(題目中把卡片發給了20個小朋友??!!)ci

 老師發給他們   1到20的奇數卡片!!注意是奇數!!也就是1 3 5 7...19,最大是19,最小是1。開發

而後集合他們站成一排,沒有順序。

按照個人理解,每一個人手裏的數只能是以下:一、三、五、七、九、十一、1三、1五、1七、19 之中的數。

咱們要找到少的小朋友,換句話說,也就是字符串中沒出現以上數當中的哪個??

由於把全部數字排成字符串了,我把1到19全部的數都列出來排成字符串,發現一共是15位數字。135791113151719 不論順序怎麼樣一共是15位。

若是少一個數字,則若是少一個一位數,應該出現14位測試用例,若是少一個兩位數,則應出現13位的測試用例。(可是阿里在線評測的測試用例給的是15位??!!!??少小朋友嗎??)

再提一個個人疑問:若是1到19的全部奇數都出現,按照個人理解,最多隻能出現兩次9,一個9 另外一個19 應該沒有其餘狀況了吧?? 可是測試用例了出現了三次9???!!!

我都蒙了,怎麼排都排不開了!

 

更奇怪的是,當我忽略這些,按照個人思路去解答這道題的時候,個人答案居然和測試用例的答案相同!!不知道爲啥。。

 

我給出我解答的思路:

小朋友的數字是1到19的奇數,那若是小朋友手裏是兩位數,則必定是十幾,也就是輸入的字符中若是出現1,要麼是十幾,要麼是1.

    若是出現的數字不是1,那就必定是個位數。

個人思想是:

  先計算1到19全部奇數的加和存給sum。通過計算sum是100.

  而後遍歷整個輸入的字符串:

    若是出現1,我就把sum減少10,按照碰到十幾來計算

    若是出現不是1,我就把sum減少出現那個數。

  通過這樣一個遍歷,有可能本年來出現1的數字,我把它當成10了,因此我又對sum進行判斷,若是sum小於等於0,就讓它增10 再減1.

 

可是不論如何,給出個人代碼,不知道個人思路是否正確,但願能帶給你們一些思路。

 

個人代碼是這樣的:C++實現

 1 #include "iostream"
 2 using namespace std;  3 int main(){  4     char li[50];  5     cin>>li;  6     int sum = 0;  7     for(int i = 1;i<=19;i+=2){  8         sum+=i;  9  } 10     for( int i = 0;li[i]!='\0';i++ ){ 11         if(li[i]=='1'){ 12             sum -= 10; 13  } 14         if(li[i]>='2'){ 15             int a = li[i]-'0'; 16             sum -= a; 17  } 18  } 19     while( sum <= 0 ){ 20         sum+=9; 21  } 22     cout<<sum; 23 
24 
25     return 0; 26 }

 

在網上目前也沒查到任何關於這道題的信息,因此寫下這篇博文。

若是有好朋友覺着個人思路有問題,但願能獲得指點!

感恩戴德!

嘻嘻~~

相關文章
相關標籤/搜索