朋友数


题目描述

如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。

输入格式

输入第一行给出正整数 N。随后一行给出 N 个正整数,数字间以空格分隔。题目保证所有数字小于10的4次方。

输出样例

首先第一行输出给定数字中不同的朋友证号的个数;随后一行按递增顺序输出这些朋友证号,数字间隔一个空格,且行末不得有多余空格。

输入样例

8
123 899 51 998 27 33 36 12

输出样例

4
3 6 9 26

分析

此题实质就是给出多个数,求出他们各个位数之和,重复的和算做一个数。
当时我还以为至少有两个或两个以上相同的和数才算是朋友数,看来是多虑了。

参考代码

#include <bits/stdc++.h>
using namespace std;
typedef struct
{
    int num = 0 ;
    bool flag = false ;
}stu;
int cmp(stu a ,stu b)
{
    return a.num > b.num;
}
stu s[10000];
int main() {
    int num ,cnt = 0 ,cnts = 0;
    cin >> num ;
    for(int i = 0 ; i < num ; ++i)
    {
        string m ;
        cin >> m ;
        int temp = 0 ;
        for(unsigned int  j = 0 ; j < m.length() ;++j)
        {
          temp = temp + m[j] - '0';
        }
        if(s[temp].num == 0)
        {
            s[temp].num = temp ;
            cnt++;
        }
    }
    cout<<cnt<<endl;
    sort(s,s+10000,cmp);
    int falh = 0 ;
    int i = cnt - 1;
    while(i >= 0)
    {
            if(falh != 0)
            {
                cout<<" ";
            }
            cout<<s[i].num;
            ++falh;
            i--;
    }
    return 0;
}

文章作者: 瑾年
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 瑾年 !
 上一篇
最简分数 最简分数
题目描述一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。现给定两个不相等的正分数 N1/M1和N2/M2,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数
2021-07-17
下一篇 
判断题 判断题
题目描述判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。
2021-07-17
  目录