阿里巴巴秋招测评题
题目描述
p.p1 { margin: 0; font: 11px Monaco; color: rgba(78, 144, 114, 1) }
幼儿园有10个小朋友,把1 – 20中所有奇数数字的卡片分别发给这20(应为10)个小朋友。 集合的时候小朋友们排成一排,组成一个由数字组成的字符串,如35971315….11917,但是老师发现少了一个小朋友,你能帮忙找出少掉的那个小朋友吗?
注意:题目描述原文有问题,官网给的测试用例也是错误的,估计有不少同学被误导了。
p.p1 { margin: 0; font: 11px Monaco; color: rgba(78, 144, 114, 1) }
思路
20以内的奇数 1 3 5 7 9 11 13 15 17 19
其中10以上的数字,十位数与个位数之和刚好依次为
11:1 + 1 = 2
13:1 + 3 = 4
15:1 + 5 = 6
17:1 + 7 = 8
19:1 + 9 = 10
刚好为 2 4 6 8 10
也即 135791113151719依次相加 = 从1到10累加求和为 55
给定了字符串,将其每一位代表的十进制数求和sum,用55减去这个值,对55-sum的奇偶性稍作判断便知
代码
1 #define N 32 2 3 int search(const char *p) { 4 int sum = 0; 5 int idx = 0; 6 int diff = 0; 7 if (!p) { 8 return -1; 9 } 10 while (p[idx]) { 11 sum += p[idx++] - \'0\'; 12 } 13 diff = 55 - sum; 14 return diff % 2 ? diff : diff + 9; 15 } 16 17 int main(void) { 18 char str[N]; 19 scanf("%s", str); 20 printf("%d\n", search(str)); 21 return 0; 22 }