zl程序教程

您现在的位置是:首页 >  后端

当前栏目

1064 朋友数(JAVA)

JAVA 朋友
2023-09-27 14:27:54 时间

如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 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

代码实现:

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

/**
 * @author yx
 * @date 2022-07-23 23:58
 */
public class Main {
    static PrintWriter out=new PrintWriter(System.out);
    static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in=new StreamTokenizer(ins);

    public static void main(String[] args) throws IOException {
        in.nextToken();
        int N=(int) in.nval;
        Set<Integer> set=new HashSet<>();
        String[] split=ins.readLine().split(" ");
        for (int i = 0; i < N; i++) {
            String s=split[i];
            int n=s.length();
            int sum=0;
            for (int j = 0; j < n; j++) {
                sum+=s.charAt(j)-'0';
            }
            set.add(sum);
        }
        ArrayList<Integer> list=new ArrayList<>(set);
        Collections.sort(list);
        System.out.println(list.size());
        for (int i = 0; i < list.size()-1; i++) {
            System.out.print(list.get(i)+" ");
        }
        System.out.print(list.get(list.size()-1));
    }
}