Вложенные циклы: решение Д/З

Домашние задания не сделал никто, мы их разобрали в классе и теперь частично повторяем. Новых тем, соответственно, не было.

Решение ДЗ 1/2

Напишем кусок кода, который считает сумму цифр в одном числе. Самый простой способ: брать остаток от деления числа на 10, делить число нацело на 10, прибавлять остаток от деления на 10 результата и так до момента, когда число станет == 0

   1     sum = 0;
   2     while(num) {
   3         sum += num%10;
   4         num/=10;
   5     }

Осталось задать цикл по вводу, и решение готово

   1 #include <stdio.h>
   2 
   3 int main() {
   4     int num, sum;
   5 
   6     sum = 0;
   7     scanf("%d", &num);
   8     while(num) {
   9         while(num) {
  10             sum += num%10;
  11             num /= 10;
  12         }
  13         scanf("%d", &num);
  14     }
  15     printf("%d\n", sum);
  16 }

Обратите внимание на то, что во внутреннем цикле отсутствует инициализация, т. к. она совпадает с изменением внешнего цикла (ввод нового num), а переменную sum инициализировать не надо, она накапливает общую сумму.

Домашнее задание

  1. Вводится последовательность положительных чисел, завершающаяся 0. Посчитать количество простых чисел среди них (число 1 можно считать простым). Для проверки простоты одного числа N надо найти хотя бы один его делитель в диапазоне от 2 до N1/2. Для этого достаточно написать цикл вида for(i=2; i*i<=N; i++) (т. е. квадрат предполагаемого делителя не превосходит N).

  2. <!> Вывести таблицу умножения «как в тетради», т. е.

     1*1=1     2*1=2     3*1=3     4*1=1
     1*2=2     2*2=4     3*2=6     4*2=8
     1*3=3     2*3=6     3*3=9     4*3=12
     ...       ...       ...       ...
     1*12=12   2*12=24   3*12=36   4*12=48
    
     5*1=5     6*1=6     7*1=7     8*1=8
     5*2=10    6*2=12    7*2=14    8*2=16
     5*3=15    6*3=18    7*3=21    8*3=24
     ...       ...       ...       ...
     5*12=60   6*12=72   7*12=84   8*12=96
    
     9*1=5     10*1=10   11*1=11   12*1=12
     9*2=10    10*2=20   11*2=22   12*2=24
     9*3=15    10*3=30   11*3=33   12*3=36
     ...       ...       ...       ...
     9*12=108  10*12=120 11*12=121 12*12=144

    напоминаю, что это просто три вложенных цикла:

    • по количеству «блоков» (табличек с подряд идущими колонками, их 12/4==3)
      • по количеству множителей в одной колонке (12)
        • по количеству колонок (4); начало и конец этого внутреннего цикла необходимо вычислять
  3. Известно, что любое натуральное число можно представить в виде суммы не более чем четырех квадратов неотрицательных целых чисел (теорема Лагранжа). Дано натуральное n; указать такие неотрицательные целые х, у, z, t, что n = x2 + y2 + z2 + t2. Подсказка: x, y, z или t могут быть нулевыми (только не все сразу).

    • <!> (на подумать) А вдруг задачу можно решить не за 4 вложенных цикла, а как-то попроще?


LecturesVMSH/C/2017-01-20 (last edited 2017-01-21 18:48:35 by FrBrGeorge)