小团想要编写一个程序,希望可以统计在M和N之间(M<N,且包含M和N)有多少个六位数ABCDEF满足以下要求:
(1) ABCDEF这六个数字均不相同,即A、B、C、D、E和F表示六个不同的数字。
(2) AB+CD=EF。即将这个六位数拆成三个两位数,使得第1个和第2个两位数的和等于第3个两位数。
数据范围:
进阶:时间复杂度
,空间复杂度%5C)
小团想要编写一个程序,希望可以统计在M和N之间(M<N,且包含M和N)有多少个六位数ABCDEF满足以下要求:
(1) ABCDEF这六个数字均不相同,即A、B、C、D、E和F表示六个不同的数字。
(2) AB+CD=EF。即将这个六位数拆成三个两位数,使得第1个和第2个两位数的和等于第3个两位数。
单组输入。
输入两个六位正整数M和N(M
输出在M到N之间(包含M和N)满足要求的六位数的个数。
100000 110000
0
public static void main(String[] args) {
int size = 0;
Scanner scanner = new Scanner(System.in);
int small = scanner.nextInt();
int big = scanner.nextInt();
HashSet set = new HashSet();
for (int i = small; i <=big ; i++) {
int A = i/100000;
int B = (i % 100000)/10000;
int C = (i % 10000)/1000;
int D = (i % 1000)/100;
int E = (i % 100)/10;
int F = i % 10;
set.add(A);
set.add(B);
set.add(C);
set.add(D);
set.add(E);
set.add(F);
int AB = A*10 +B;
int CD= C*10 +D;
int EF = E*10 +F;
if (set.size() == 6 && (AB+CD) == EF){
size++;
}
set.clear();
}
System.out.println(size);
}
关键一点就是想到用 set,如果有重复的,那就长度小于6,长度等于6就可以了。最后清空set,再次判断。