如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如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 首先回顾一下题目,题目的要求是 有序,并且不重复 的输出元素,这个与set的特征完全吻合。
package com.hone.basical; import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
/**
* 原题目:https://www.patest.cn/contests/pat-b-practise/1064
* @author Xia
* 朋友数
* 上一个利用list来存储,现在利用set来存储
* 因为set是不重复,并且有序的。
*/ public class basicalLevel1064friends2Set { public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
Set<Integer> sum = new TreeSet<>();
for (int i = 0; i < n; i++) {
int a = in.nextInt();
int b = 0;
while (a>0) {
b +=a%10;
a = a/10;
}
sum.add(b);
}
System.out.println(sum.size());
boolean isFirst = true;
for (Integer id : sum) {
if (!isFirst) {
System.out.print(" ");
}
System.out.print(id);
isFirst = false;
}
}
}
------------------------Set用法------------------------------------------------------- A collection that contains no duplicate elements. More formally, sets contain no pair of elementse1
ande2
such
thate1.equals(e2)
, and at most one null element. As implied by its name, this interface models the mathematical
set abstraction. 引用java Api中的话,Set实际上就是数学上集合的抽象,要求其不能有相同的元素,并且最多只能有一个空元素。 下面用具体的代码来表示其方法
package com.hone.test; import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
/**
* Set
* TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。
* @author Xia
*/
public class Sets {
public static void main(String[] args) {
Set<Integer> test = new TreeSet<>(); Set<Integer> needAdd = new TreeSet<>();
int a = 1;
int b = 2;
int c = 3;
int h = 7;
int w = 5;
test.add(a);
test.add(b);
needAdd.add(h);
needAdd.add(w);
System.out.println(test.size()); //判断容器的大戏i奥
System.out.println(test.isEmpty()); //判断容器是否为空
System.out.println(test.remove(a)); //移除容器中的a元素
test.add(c);
//利用foreach遍历
for (Integer value : test) {
System.out.print(value+" ");
}
System.out.println(); //利用Iterator实现遍历
Iterator<Integer> value = test.iterator();
while (value.hasNext()) {
int s = value.next();
System.out.print(s+" ");
}
System.out.println(); //将一个集合添加到另一个集合中
test.addAll(needAdd);
for (Integer value2 : test) {
System.out.print(value2+" ");
}
System.out.println(); //删除集合,并且利用foreach重新遍历
System.out.println(test.removeAll(needAdd));
for (Integer value2 : test) {
System.out.print(value2+" ");
}
System.out.println(); //clear()清空集合中的元素
needAdd.clear();
System.out.println(needAdd.size());
}
}