【PAT甲级 - C++题解】1120 Friend Numbers

简介: 【PAT甲级 - C++题解】1120 Friend Numbers

1120 Friend Numbers

Two integers are called “friend numbers” if they share the same sum of their digits, and the sum is their “friend ID”. For example, 123 and 51 are friend numbers since 1+2+3 = 5+1 = 6, and 6 is their friend ID. Given some numbers, you are supposed to count the number of different friend ID’s among them.


Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N. Then N positive integers are given in the next line, separated by spaces. All the numbers are less than 104.


Output Specification:

For each case, print in the first line the number of different friend ID’s among the given integers. Then in the second line, output the friend ID’s in increasing order. The numbers must be separated by exactly one space and there must be no extra space at the end of the line.


Sample Input:

8
123 899 51 998 27 33 36 12

Sample Output:

4
3 6 9 26


题意

这道题不要混淆了题目条件,题目需要求的是有多少朋友证号,而朋友证号是指每个数的各位之和,比如 123 的朋友证号是 1 + 2 + 3 = 6 ,33 的朋友证号也是 3 + 3 = 6 ,并且 123 和 33 被称为朋友数。但是需要注意的是,并不是说只有被称为朋友数才能被称为朋友证号,所以这道题朋友数这个性质实际上用不到。


思路

根据上述题意可以知道我们需要找出有多少个不同的朋友证号,可以利用 set 容器的性质,会帮我们自动过滤掉重复的值,并且为我们自动排序好。所以只需要将每个数的朋友证号计算出来再放进 set 中,最后输出即可。

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    set<int> nums;
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        //计算各位之和
        int sum = 0;
        while (x) sum += x % 10, x /= 10;
        nums.insert(sum);   //set容器中已经帮我们过滤掉相同的朋友证号了
    }
    //输出答案
    cout << nums.size() << endl;
    bool is_first = true;
    for (auto& s : nums)
    {
        if (is_first) is_first = false;
        else cout << " ";
        cout << s;
    }
    cout << endl;
    return 0;
}


目录
相关文章
|
2月前
|
编译器 数据安全/隐私保护 C++
C++(十四) friend友元
友元机制允许非成员函数或类访问私有成员,提高程序效率,但会破坏封装性。友元可以是函数或类,并以关键字`friend`声明。友元函数不是成员函数,需通过对象访问私有成员。友元类使所有成员函数可访问另一个类的私有成员,常用于简化开发。友元声明位置灵活,但不影响访问控制。使用友元需注意其单向性和非传递性。
|
6月前
|
算法 C++
C++中的友元类(Friend Classes)技术详解
C++中的友元类(Friend Classes)技术详解
273 0
|
编译器 C++
《C++避坑神器·五》友元函数(friend)使用看这篇就够
《C++避坑神器·五》友元函数(friend)使用看这篇就够
435 0
|
C++
C++中的friend 关键字
# C++中的友元 `friend` > 友元是用关键字声明的函数或类 类的非成员函数可以访问类的保护成员和私有成员(如果它被声明为类的友元),这是通过在外部函数声明的前面加上关键字`friend`完成的 声明方式 ```cpp friend <类型><友元函数名>(<参数表>); ``` ## 友元函数 > 友元函数只是一个普通的函数,而并非一个类的成员函数,它可以在任意地方调用,友元函数通过对象名来访问该类的私有成员或共有成员。 ```c++ #include<iostream> using namespace std; class MYclass { public:
89 0
|
C++
【PAT甲级 - C++题解】1040 Longest Symmetric String
【PAT甲级 - C++题解】1040 Longest Symmetric String
66 0
|
算法 C++
【PAT甲级 - C++题解】1044 Shopping in Mars
【PAT甲级 - C++题解】1044 Shopping in Mars
82 0
|
C++
【PAT甲级 - C++题解】1117 Eddington Number
【PAT甲级 - C++题解】1117 Eddington Number
77 0
|
存储 C++ 容器
【PAT甲级 - C++题解】1057 Stack
【PAT甲级 - C++题解】1057 Stack
76 0
|
存储 C++
【PAT甲级 - C++题解】1055 The World‘s Richest
【PAT甲级 - C++题解】1055 The World‘s Richest
79 0
|
6天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
30 5