2017-02-13 9 views
-3

Итак, у меня есть эта функция, которая проверяет, является ли число счастливым числом или нет. Он возвращает либо true, либо false.распечатка первых 888 счастливых чисел

bool is_happy(int x) //Let the function determine if the number is happy 
{ 

int result; 
while (x != 1) //If x == 1, it is a happy number 
{ 
    result = 0; 
    while (x) //Until every digit has been summed 
    { 
     result += (x % 10) * (x % 10); //Square digit and add it to total 
     x /= 10; 
    } 
    x = result; 
    if (x == 4) //if x is 4, its a sad number 
     return false; 
} 
return true; 
} 

он работает должным образом и возвращает true, когда X - счастливое число.

Что я пытаюсь сделать, это напечатать первые 888 счастливых чисел.

Я попытался установить петлю, пока тот целочисленный б, который увеличивает

int b=0; 
while(b<=888) { 
b++; 
} 

однако, я не уверен, как включать и приращение X, всякий раз, когда я пытаюсь и включать в себя и приращение х, он просто печатает первый счастливый номер 888 раз.

Моя проблема заключается в попытке увеличить x, и когда он достигает счастливого числа, он выводит это счастливое число, а затем увеличивает b. Я могу использовать только iostream и другие библиотеки.

EDIT: Извинения за недостаток ясности!

Я пытаюсь распечатать первые 888 счастливых чисел, у меня есть функция, которая проверяет, счастлив ли номер. Я пытаюсь создать цикл, который выводит первые 888 чисел, которые возвращают функцию True.

Большое спасибо!

+0

показать вашу попытку ** в коде **. – LogicStuff

ответ

0

Вам необходимо пройти б вашей функции, и сохранить количество счастливых чисел:

int b = 0; 
    int count = 0; 
    while(count < 888) { 
     if ( is_happy(b)) { 
     // do something 
     count++; 
     } 
     b++; 
    } 
+0

Вот где копирует и вставляет вас. Исправлена. –

1

Попробуйте следовать этой логике.

Сначала создайте переменную для счетчика. Скажем, int counter = 0;.

Затем, сделайте следующее:

while (counter < 888) 
{ 

    if (number == /*happy condition*/) 
    { 
    //do somehting 
    counter++; 
    } 


    else 
    { 
    // :(
    } 

} 
0

Вам нужно будет увеличивать оба номера отдельно:

int b = 0; 
for (int x = 1; b < 888; x++) { 
    if (is_happy(x)) { 
     // print 
     b++; 
    } 
} 
Смежные вопросы