问题描述
如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。
输入格式
输入第一行给出正整数 N。随后一行给出 N 个正整数,数字间以空格分隔。题目保证所有数字小于
1
0
4
10^4
104。
输出格式
首先第一行输出给定数字中不同的朋友证号的个数;随后一行按递增顺序输出这些朋友证号,数字间隔一个空格,且行末不得有多余空格。
样例输入
8
123 899 51 998 27 33 36 12
样例输出
4
3 6 9 26
???
诶我就不明白了,这样例输出里的3是怎么来的……以下的代码是错误的,但我还是贴上来了,请大佬指正🤔
C++代码
#include<bits/stdc++.h>
using namespace std;
int asum(int x){
int sum=0;
while(x!=0){
sum+=x%10;
x/=10;
}
return sum;
}
int main(){
int n;
cin>>n;
int a[10000],k=0,num[90000]={0};
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(asum(a[i])==asum(a[j])&&num[asum(a[i])]==0){
num[asum(a[i])]=1;
k++;
break;
}
cout<<k<<endl;
int f=0;
for(int i=0;i<90000;i++){
if(num[i]==1&&f==1) cout<<" "<<i;
if(num[i]==1&&f==0){
cout<<i;
f=1;
}
}
return 0;
}
Tips
写着写着突然发现了对付这种【数字间隔一个空格,且行末不得有多余空格】的好方法:
(不是每个 i 都输出,输出条件是与exp1有关)
int f=0;
for(int i=0;i<n;i++){
if(exp1&&f==1) cout<<" "<<i;
if(exp1&&f==0){
cout<<i;
f=1;
}
}
如果是每个 i 都输出用这个:
for(int i=0;i<n;i++){
if(i==0) cout<<i;
else cout<<" "<<i;
}