package pers.robert.lanqiaobeizhenti129;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Scanner;
import java.util.Set;
/**
* 48.亲密数
假设有a、b两个数,若a的所有因子之和等于b,b的所有因子之和等于a,
并且a不等于b,则称a和b是一对亲密数。如284和220就是一对亲密数。
分析:
若要找出10000以内的亲密数,可使用以下算法:
(1)对每一个数i,将其因子分解出来,并将因子保存到一个数组中,再将因子之和保存到变量b1。
(2)将因子之和b1再进行因子分解,并将因子保存到一个数组中,将因子之和保存到变量b2中。
(3)若b2等于i,并且b1不等于b2,则找到一对亲密数为i和b1,可将其输出。
(4)重复步骤(1)~(3),即可找出指定范围的亲密数。
* @author Robert
*
*/
public class The048SweetNumberDemo1 {
public static int obtain(int n) {//得出n的因子和
int sum = 0;
for (int i = 1; i < n; i++) {
if (n % i == 0) {
sum += i;
}
}
return sum;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
Set<Set<Integer>> sets = new LinkedHashSet<Set<Integer>>();
for (int i = 1; i <= n; i++) {
int t = obtain(i);//t=i的因子和
if (i != t) {//如果i不等于t
if (obtain(t) == i) {//如果t的因子和等于i
Set<Integer> set = new LinkedHashSet<Integer>();
set.add(i);
set.add(t);
sets.add(set);//把i,t-->set-->sets
}
}
}
for (Iterator iterator = sets.iterator(); iterator.hasNext();) {
Set<Integer> set = (Set<Integer>) iterator.next();
for (Iterator iterator2 = set.iterator(); iterator2.hasNext();) {
Integer integer = (Integer) iterator2.next();
System.out.print(integer);
if (iterator2.hasNext() == false) {
System.out.println();
} else {
System.out.print(" ");
}
}
}
}
}
备考蓝桥杯(38)迭代器输出java实现
最新推荐文章于 2022-12-28 20:49:52 发布