阿里巴巴秋招测评题

题目描述

   幼儿园有10个小朋友,把1 – 20中所有奇数数字的卡片分别发给这20(应为10)个小朋友。 集合的时候小朋友们排成一排,组成一个由数字组成的字符串,如35971315….11917,但是老师发现少了一个小朋友,你能帮忙找出少掉的那个小朋友吗

 

注意:题目描述原文有问题,官网给的测试用例也是错误的,估计有不少同学被误导了。

 

 

思路

    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 }

 

 

 

 

posted @ 2017-08-14 20:46  Cloud2020  阅读(663)  评论(0)    收藏  举报