2014-04-12 2 views
1

Я пытаюсь вернуть n-й номер. Начиная с 1, если число кратно 3 или 7, то это число пропущено, и будет выполнено следующее число. Однако, если число кратно как 3, так и 7, то число не пропущено.Возвращает n-й номер

public int Multiple(int num){ 
int n1 = n % 3; 
int n2 = n % 7; 
int count = 1; 
for (int i = 1; i <= n; i++) { 
    if (n1 != 0 || n2 != 0) 
     count++; 
    if (n1 == 0 && n2 == 0) 
     count++; 
    else if (n1 == 0 || n2 == 0) 
     continue; 
} 
return count; 
} 
+2

Вы узнаете больше, пытаясь решить эту проблему самостоятельно. –

ответ

1

Это сделает работу:

public static int nthNumber(int nth) { 
    int num = 1; 
    for (int count = 1; count < nth;) { 
     if ((++num % 3 == 0) == (num % 7 == 0)) count++; 
    } 
    return num; 
} 

ВЫХОДА из первых 20 номеров:

1 -> 1 
2 -> 2 
3 -> 4 
4 -> 5 
5 -> 8 
6 -> 10 
7 -> 11 
8 -> 13 
9 -> 16 
10 -> 17 
11 -> 19 
12 -> 20 
13 -> 21 
14 -> 22 
15 -> 23 
16 -> 25 
17 -> 26 
18 -> 29 
19 -> 31 
20 -> 32 
+0

'! ((Num% 3 == 0)^(num% 7 == 0))' является своего рода уродливым. Просто используйте это: '((num% 3 == 0) == (num% 7 == 0))' – Obicere

+0

@Obicere да, намного лучше :) thx! – Harmlezz

+0

Я немного улучшил алгоритм. Теперь он еще менее сложный. – Harmlezz

1

Я думаю, вы хотите поместить следующие две строки внутри цикла.

int n1 = n % 3; 
int n2 = n % 7; 

Кроме того, ваша логика немного испорчена. Вы должны увеличивать счетчик точно, когда n1 и n2 равны нулю или оба отличны от нуля.

int count = 0; 
int i; 
for (i = 1; count <= num; i++) { 
    int n1 = i % 3; 
    int n2 = i % 7; 
    if (n1 != 0 && n2 != 0) 
     count++; 
    else if (n1 == 0 && n2 == 0) 
     count++; 
    else // There is only one condition left. One is zero but the other is not. 
     continue; 
} 

return i; 
1

Если вы хотите получить n-й номер, который соответствует вашему условию, этот код будет в порядке.

public int Multiple(int n){ 

    int count=0; 
    for(int i=1;;i++) 
    { 
     if(i%3==0&&i%7==0) 
     { 
      count++; 
     } 
     else if(i%3==0||i%7==0) 
      continue; 
     else 
     { 
      count++; 
     } 
     if(count==n) 
     { 
      return i; 
     } 

    } 

}

+0

от каких цифр? ооо !! –

+0

Я отредактировал, PLS видеть там. –

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