小团想要编写一个程序,希望可以统计在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<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,再次判断。