首页 > 代码库 > PAT 1064. 朋友数(20)

PAT 1064. 朋友数(20)

如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如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
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #include<ctype.h>
 5 #include<math.h>
 6 int cmp(const void *a,const void *b){
 7     return *(int*)a-*(int*)b;
 8 }
 9 int main(){
10     int n;
11     char a[10];
12     int b[10010];
13     int len;
14     int sum;
15     int h=0;
16     int j;
17     scanf("%d",&n);
18     for(int i=0;i<n;i++){
19         scanf("%s",a);
20         sum = 0;
21         len = strlen(a);
22         for(j=0;j<len;j++){
23             sum = sum+(a[j]-0);
24         }
25         for(j=0;j<h;j++){
26             if(sum==b[j]){
27                 break;
28             }
29         }
30         if(j==h){
31             b[h++] = sum;
32         }
33         
34     }
35     qsort(b,h,sizeof(int),cmp);
36     printf("%d\n",h);
37     for(int i=0;i<h;i++){
38         if(!i)
39             printf("%d",b[i]);
40         else
41             printf(" %d",b[i]);
42     }
43      
44 } 

 

PAT 1064. 朋友数(20)