阿里巴巴后端预热题,秋招第一波笔试的悲惨遭遇。

做为一名软件工程的本科生,满怀热情的投了各大公司的简历。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 }

 

在网上目前也没查到任何关于这道题的信息,因此写下这篇博文。

若是有好朋友觉着个人思路有问题,但愿能获得指点!

感恩戴德!

嘻嘻~~

相关文章
相关标签/搜索