Member 13440232 Ответов: 2

Чтобы я достиг итерационного решения в C++


Я пишу код в следующей функции (detectHappy), которая будет проверять, является ли число счастливым числом или нет, только для 10 циклов (итераций). Моя функция должна :

- Найдите сумму цифр числа.

- Проверьте результат, полученный в пункте 1. Если это 1, присвойте значение 1 переменной 'finalNumber', иначе снова выполните пункт 1, пока полученное число не станет 1 или пока число циклов не увеличится до 10.

- Присвойте значение итерации переменной 'cycle_no'.

Я не должен вводить, выводить или объявлять какие-либо дополнительные функции. Мне просто нужно написать тело уже объявленной там функции, которая заставит ее работать на оболочке, предложенной в моем курсе...

Программа, которую я пытался написать, компилируется, но не дает правильных результатов (например, число 6 генерирует значение 32765 после 10 циклов вместо ожидаемых 145. Сейчас мне не хватает идей, и я буду благодарен за любую помощь. Заранее спасибо.

Что я уже пробовал:

/*Question      : Write your code to find whether the number is a happy number or not (for max 10 cycles).
int number      : The number to be determined whether it is happy or not
int finalNumber : Store the resultant value in this variable
int cycle_no    : Store the number of iterations done to determine whether the 'number' is happy or not */

void detectHappy(int number, int &finalNumber, int &cycle_no) {

    //Write your solution code below this line
    int sum = 0;
    int i = 1;
    do{
        sum += (number%10)*(number % 10);
        number /=10;
        if (sum == 1){
            finalNumber = 1;
            break;
        }
        else {
            number = sum;
            ++number;
        }
        cycle_no = ++i;
    }
    while (i < 10);
}

2 Ответов

Рейтинг:
5

Patrice T

Когда вы не понимаете, что делает ваш код, ответ таков: отладчик.
Счастливое число - Википедия[^]
Возьмите пример из этой ссылки и сравните с тем, что делает ваш код.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
13

CPallini

Вы пропустили внутреннюю петлю на цифрах числа. Попробуй

void detectHappy(int number, int &finalNumber, int &cycle_no)
{
  for (cycle_no=1; cycle_no <= 10; ++cycle_no)
  {
    finalNumber = 0;
    while (number)
    {
      finalNumber += (number % 10)  * (number % 10);
      number /= 10;
    }
    if (finalNumber == 1)
      return;
    number = finalNumber;
  }
}


Member 13440232

Спасибо @CPallini...Большое вам спасибо за подсказку...Теперь я вижу, что упустил...С очень небольшими изменениями код работал. Вот как я это сделал:


пустота detectHappy(число int, инт &амп;finalNumber, инт &амп;cycle_no)
{
for (cycle_no=0; cycle_no < 10; cycle_no++)
{
finalNumber = 0;
в то время как (число)
{
finalNumber += (число % 10) * (число % 10);
число /= 10;
}
if (finalNumber == 1)
вернуть;
количество = finalNumber;
}
}

CPallini

Добро пожаловать.