1064. 朋友数(20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如123和51就是朋友数,因为1+2+3 = 5+1 = 6,而6就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。注意:我们默认一个整数自己是自己的朋友。
输入格式:
输入第一行给出正整数N。随后一行给出N个正整数,数字间以空格分隔。题目保证所有数字小于104。
输出格式:
首先第一行输出给定数字中不同的朋友证号的个数;随后一行按递增顺序输出这些朋友证号,数字间隔一个空格,且行末不得有多余空格。
输入样例:8 123 899 51 998 27 33 36 12输出样例:
4 3 6 9 26
#include <stdio.h> //int cmp(const void*a, const void*b) //{ // return *(int*)a - *(int*)b; //} int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int arr[40][2] = { 0 }; int arr1[40] = { 0 }; int N, num1, num2, count = 0, i, j = 0, flag = 0, flag1 = 0; scanf("%d", &N); for (i = 0; i < N; i++) { scanf("%d", &num1); if (num1 == 0) { arr[0][0]++; arr[0][1] = 0; continue; } num2 = num1; while (num1 >= 1) { count += num1 % 10; num1 /=10; } arr[count][0]++; count = 0; } for (i = 0; i < 40; i++) { if (arr[i][0] != 0) { arr1[flag] = i; flag++; } } //qsort(arr1, flag, sizeof(arr1[0]), cmp); printf("%d\n", flag); for (i = 0; i < flag; i++) { if (!flag1) { printf("%d", arr1[i]); flag1 = 1; } else printf(" %d", arr1[i]); } }