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 int cmp(const void*a, const void*b)
 5 {
 6     return *(int*)a -*(int*)b;    
 7 }
 8  
 9 int main()
10 {
11     int N;
12     scanf("%d",&N);
13     int arr[N];
14     int num[N];
15     //读入数据,并将每个数据的各位之和存储在数组num[]中 
16     for(int i=0; i<N; i++)
17     {
18         scanf("%d",&arr[i]);
19         int tmp=arr[i];
20         int sum = 0;
21         while(tmp)
22         {
23             sum+=(tmp%10);
24             tmp/=10;
25         }
26         num[i] = sum;//num数组存储朋友证号 
27     }    
28 //    printf("%d\n",num[7]);
29     int cnt=0;//cnt为朋友数计数器 
30     int brr[10000];
31     int final[N];
32     memset(final,0,sizeof(final));
33     for(int i=0; i<N; i++)
34     {
35         brr[num[i]] = 0;
36     }
37     for(int i=0; i<N-1; i++)
38     {    
39         if(brr[num[i]])
40                 continue;
41         for(int j=i+1; j<N; j++)
42         {
43             if(brr[num[j]])
44                 continue;
45             if(num[i] == num[j])
46             {
47                 brr[num[j]] = 1;
48                 final[cnt++] = num[i];  
49             }
50         }
51     }
52     //单独证书自己的朋友数统计 
53     for(int i=0; i<N; i++)
54     {
55         if(!brr[num[i]])
56             final[cnt++] = num[i];
57     }
58     //排序
59     qsort(final,cnt,sizeof(int),cmp);
60     //输出相异朋友证号总数
61     printf("%d\n",cnt);
62     //输出升序排列的朋友数
63     for(int i=0; i<cnt; i++)
64     {
65         if(i!=cnt-1)
66         printf("%d ",final[i]);
67         else
68         printf("%d",final[i]);    
69     } 
70      
71     
72     return 0;
73  } 

 

posted @ 2016-12-11 15:39  ValarMorghulis  阅读(519)  评论(0编辑  收藏  举报