Правильный результат при неправильном коде. Как? - C#

Узнай цену своей работы

Формулировка задачи:

Даны натуральные числа m и n. Получить все натуральные числа, меньшие n, квадрат суммы цифр которых равен m. Вопрос в том, почему программа работает правильно при закомментированной строке (строка 23), а с нею, но рабочей, результат не тот?
Листинг программы
  1. Console.WriteLine("Даны натуральные числа m и n. Получить все натуральные числа, меньшие n, квадрат суммы цифр которых равен m.");
  2. Console.Write("Введите n: ");
  3. int n = Convert.ToInt32(Console.ReadLine());
  4. Console.Write("Введите m: ");
  5. int m = Convert.ToInt32(Console.ReadLine());
  6. int sum = 0;
  7. int i = 1;
  8. int icopy = 1;
  9. while(i<n)
  10. {
  11. while (i > 0)
  12. {
  13. sum += i % 10;
  14. i = (i - i % 10) / 10;
  15. }
  16. if (sum * sum == m)
  17. {
  18. i = icopy;
  19. Console.WriteLine(i);
  20. icopy++;
  21. //sum=0;
  22. }
  23. else
  24. {
  25. icopy++;
  26. i = icopy;
  27. sum = 0;
  28. }
  29. }

Решение задачи: «Правильный результат при неправильном коде. Как?»

textual
Листинг программы
  1.             int sum = 0;
  2.             int i = 1;
  3.            int icopy = 1;
  4.             while(i<n) // есть явная переменная цикла, следует использовать for
  5.             {
  6.                 while (i > 0)
  7.                 {
  8.                     sum += i % 10;
  9.                     i = (i - i % 10) / 10; // нет нужды так менять переменную цикла - это приводит к путанице, меняйте лучше icopy
  10.                 }
  11.                 if (sum * sum == m)
  12.                 {  // тут вообще всё запутано, поэтому вопрос и возник            
  13.                     i = icopy;
  14.                     Console.WriteLine(i);
  15.                     icopy++;
  16.                    //sum=0;
  17.  
  18.                 }
  19.                 else
  20.                 { // тут тоже всё плохо, потому что от этого лишнего кода можно легко избавиться
  21.                     icopy++;
  22.                     i = icopy;
  23.                     sum = 0;
  24.                 }
  25.             }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы