1120 Friend Numbers
题目翻译:
如果两个整数各位数之和相等,那么这两个数称为“friend numbers”,和称为“friend ID”。例如,123和51就是“friend numbers”,因为1+2+3=5+1=6,6为“friend ID”。现在,给你几个数,要求计算出他们中不同的friend ID。
输入格式:每个输入文件包含一个测试用例,每个用例第一行输入一个正整数N,下一行输入N个正整数,用空格隔开,所有的数都小于10000.
输出格式:对于每个用例,第一行输出输入数字中不同的friend ID共有多少个。第二行以从小到大的顺序输出friend ID。每个数字用空格隔开,末尾没有多余的空格。
输入样例:
8
123 899 51 998 27 33 36 12
输出样例:
4
3 6 9 26
解题思路
1.将输入的数存放在数组中,计算出friend ID,存放到另一个数组中
2.使用sort语句进行排序
3.寻找不相同的friend ID,并存放到数组中
4.将数组输出即可得到结果
代码
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int n,number=0;
scanf("%d",&n);
int num[n],fr[n],frd[n];
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
}//输入,将输入的数字存储到数组num中
for(int j=0;j<n;j++){
fr[j]=0;
while(num[j]){
fr[j]=fr[j]+num[j]%10;
num[j]=num[j]/10;
}
}//将输入的数字各位数相加,存储到数组fr中
sort(fr,fr+n);//STL中的标准排序函数
int m=0;
while(m<n){
frd[number]=fr[m];
if(fr[m]!=fr[m+1]) number++;
m++;
}//统计friend numbers,并将friend ID存到frd数组中
printf("%d",number);
printf("\n");
for(int k=0;k<number-1;k++){
printf("%d ",frd[k]);
}//输出
printf("%d",frd[number-1]);
return 0;
}
PS:总觉得代码太重,欢迎大神指正