我正在处理这个问题https://projecteuler.net/problem=49。 这是检查传递给它的数字(4位数)的每个排列的函数,并检查它们的素数,如果有超过2(即3)打印数字。
我得到的输出是一个永无止境的数字序列。我做错了什么?
P.s-非常确定它与重复的数字有关,无法弄清楚如何解决它。
void checkperm(int a) {
int w, x, y, z = 0;
int count = 0;
w = a % 10;
x = (a % 100 - w) / 10;
y = (a % 1000 - (10 * x + w) / 100);
z = a - (y * 100 + x * 10 + w)/1000;
System.out.println(w+x+y+z); /*test*/
int[] data;
data = new int[] { w, x, y, z };
int[] num = new int[100];
for (int m = 0; m < 4; m++) {
for (int n = 0; n < 4; n++) {
for (int o = 0; o < 4; o++) {
for (int p = 0; p < 4; p++) {
if (true) {
int gnaw = 1000 * data[m] + 100 * data[n] + 10 * data[o] + data[p];
if (checkprime(gnaw)) {
num[count] = gnaw;
count++;
}
}
}
}
}
}
if (count > 2)
for (int h = 0; h < 4; h++) {
System.out.println(num[h]);
}
}
答案 0 :(得分:0)
你计算w,x,y和z的方式是错误的。
应该是什么 -
int temp = a;
w = temp%10;
temp = temp/10;
x = temp%10;
temp = temp/10;
y = temp%10;
temp = temp/10;
z = temp;
这只是代码中的逻辑纠正。理想情况下,所有这些都应该在循环中发生。
这有助于假设您的其余代码在逻辑上是正确的(我还没有通过)。