1. 题目

PAT (Basic Level) Practice (中文): 1064

如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 123 和 51 就是朋友数,因 为$1+2+3=5+1=6$,而 6 就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。

1.1. 输入格式:

输入第一行给出正整数 N。随后一行给出 N 个正整数,数字间以空格分隔。题目保证所有数字小于 $10^{4}$。

1.2. 输出格式:

首先第一行输出给定数字中不同的朋友证号的个数;随后一行按递增顺序输出这些朋友证号,数字间隔一个空格,且行末不得有多余空格。

1.3. 输入样例:

8
123 899 51 998 27 33 36 12

1.4. 输出样例:

4
3 6 9 26

2. 作答

2.1. 代码

#include "stdio.h"

int friendNum(int n) {
    int res = 0;
    while (n) {
        res += n%10;
        n/=10;
    }
    return res;
}

int main(int argc, char const *argv[]) {
    int i, n, first = 1, total = 0, tmp, max = 0, flag[10100] = {0};
    scanf("%d", &n);
    for (i = 0; i < n; ++i) {
        scanf("%d", &tmp);
        tmp = friendNum(tmp);
        if (flag[tmp] == 0) {
            flag[tmp] = 1;
            ++total;
            max = max<tmp?tmp:max;
        }
    }
    printf("%d\n", total);
    for (i = 0; i <= max; ++i) {
        if (flag[i]) {

            printf("%s%d", (first?"":" "), i);
            first=0;
        }
    }
    return 0;
}

2.2. 评测结果

提交时间 状态 分数 题目 编译器 耗时 用户
2019/3/2 15:00:44 答案正确 20 1064 C (gcc) 4 ms soulans
测试点 结果 耗时 内存
0 答案正确 3 ms 620 KB
1 答案正确 2 ms 384 KB
2 答案正确 2 ms 352 KB
3 答案正确 4 ms 344 KB