2016-02-03 2 views
0

Я работаю над этой проблемой 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

Попробуйте напечатать 'w',' x', 'y' и' z'. Вы найдете некоторые ошибки в своих определениях. – user2357112

ответ

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; 

Это просто логика коррекции из вашего кода. В идеале все это должно происходить в цикле.

Это поможет предположить, что ваш остаток кода логически корректен (чего я еще не прошел).

Смежные вопросы