做爲一名軟件工程的本科生,滿懷熱情的投了各大公司的簡歷。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 }
在網上目前也沒查到任何關於這道題的信息,因此寫下這篇博文。
若是有好朋友覺着個人思路有問題,但願能獲得指點!
感恩戴德!
嘻嘻~~