1064. 朋友数(20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如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
思路:本题我是用了STL中的set容器,set容器中无相同的值,正好顺从题意
1 // 1064.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include<iostream> 6 #include<set> 7 8 using namespace std; 9 10 int getsum(int x); 11 12 int main() 13 { 14 int N; 15 set<int> sum; 16 17 cin >> N; 18 19 int *p = new int[N]; 20 21 for (int i = 0; i < N; i++) 22 { 23 cin >> p[i]; 24 25 sum.insert(getsum(p[i])); 26 } 27 28 cout << sum.size() << endl; 29 30 set<int>::iterator i = sum.begin(), end = sum.end(); 31 int size = sum.size();//获取sum容器的大小 32 33 for (int j = 0; j < size;j++,i++) 34 { 35 cout << *i; 36 37 if (j != size - 1) 38 cout << " "; 39 } 40 41 delete[] p; 42 return 0; 43 } 44 45 //求和函数 46 int getsum(int x) 47 { 48 int sum = 0; 49 50 for (int j = 10; x != 0; j = j * 10) 51 { 52 sum += x%10; 53 x = x / 10; 54 } 55 56 return sum; 57 }