package 第七届试题;
public class 凑平方数 {
public static boolean[] used = new boolean[10]; // 判断0-9中用过的数字
static long[] res = new long[10];
public static boolean[] mark;
public static int sum = 1;
static boolean judge(long x) {
mark = new boolean[10];
if (x == 0)
return true;
while (x != 0) {
if (mark[(int) (x % 10)] || used[(int) (x % 10)])
return false;
mark[(int) (x % 10)] = true;
x /= 10;
}
return true;
}
// count代表已经使用的位数
// 更新标记
static int update(long x, int count) {
if (x == 0) {
used[0] = true;
count++;
return count;
}
while (x != 0) {
used[(int) (x % 10)] = true;
x /= 10;
count++;
}
return count;
}
// 复原标记
static void reupdate(long x) {
if (x == 0) {
used[0] = false;
return;
}
while (x != 0) {
used[(int) (x % 10)] = false;
x /= 10;
}
}
// res_count:平方数的个数
// count:已经使用的位数
// last:最后使用的平方数
static void dfs(int res_count, int count, long last) {
if (count == 10) {
for (int i = 0; i < res_count; i++)
System.out.print(res[i] + " ");
System.out.println(">>>" + sum);
sum++;
return;
}
for (long i = last; i <= 100000; i++) {
if (judge(i * i)) {
int tmpcount = update(i * i, count);
res[res_count] = i * i;
dfs(res_count + 1, tmpcount, i + 1);
reupdate(i * i);
}
}
}
public static void main(String[] args) {
dfs(0, 0, 0);
}
}
凑平方数 第七届蓝桥杯决赛javaA组
最新推荐文章于 2022-03-06 18:23:20 发布