PAT 乙级 1064 朋友数(20) C++版

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 }
原文地址:https://www.cnblogs.com/cdp1591652208/p/7136912.html