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
3 6 9 26
注意这里有个超级大坑!!!!!
输出格式:
首先第一行输出给定数字中不同的朋友证号的个数;随后一行按递增顺序输出这些朋友证号,数字间隔一个空格,且行末不得有多余空格。
#include <iostream> #include <algorithm> using namespace std; int main() { int N,j,z=0; int n[10000],g[10000],s[10000],b[10000],q[10000],w[10000],m[10000]; cin>>N; for(int i=1;i<=N;i++) { j=i-1; cin>>n[j]; } for(int i2=0;i2<N;i2++) { if(n[i2]<10) { g[i2]=n[i2]; } else if(n[i2]<100&&n[i2]>9) { g[i2]=n[i2]%10; s[i2]=n[i2]/10; } else if(n[i2]<1000&&n[i2>99]) { g[i2]=n[i2]%10; b[i2]=n[i2]/100; s[i2]=(n[i2]-b[i2]*100)/10; } else if(n[i2]<10000&&n[i2>999]) { g[i2]=n[i2]%10; q[i2]=n[i2]/1000; b[i2]=(n[i2]-q[i2]*1000)/100; s[i2]=(n[i2]-q[i2]*1000-b[i2]*100)/10; } } for(int i3=0;i3<N;i3++) { if(n[i3]<10) { m[i3]=g[i3]; //cout<<m[i3]<<"\n"; } else if(n[i3]<100&&n[i3]>9) { m[i3]=g[i3]+s[i3]; //cout<<m[i3]<<"\n"; } else if(n[i3]<1000&&n[i3>99]) { m[i3]=g[i3]+s[i3]+b[i3]; //cout<<m[i3]<<"\n"; } else if(n[i3]<10000&&n[i3>999]) { m[i3]=g[i3]+s[i3]+b[i3]+q[i3]; //cout<<m[i3]<<"\n"; } } /*for(int i4=0;i4<N;i4++) { cout<<m[i4]<<" "; } cout<<"\n";*/ for(int i5= 0; i5 < N; i5++) { int j2 = 0; for(; j2 < z; j2++) { if(m[i5] == w[j2]) //z++; break; // 找到相同的了 } if(j2 == z) { // 没有找到一个相同的 w[z] = m[i5]; //break; // 找到相同的了 z++; } } cout<<z<<"\n"; sort(w,w+z); for(int i6=0;i6<z-1;i6++) { cout<<w[i6]<<" "; } cout<<w[z-1]; return 0; }
关于作者