Пример 2

Найти все натуральные числа, не превосходящие заданного N и равные сумме кубов его цифр.

При разработке алгоритма программы перечислим объекты, необходимые для решения данной задачи:

· N – заданное пользователем число. Ограничим его значением, максимально-допустимым форматом int, т.е. значением 32766. Однако чтобы выполнить проверку на ограничение, объявим его как unsigned int;

· u – текущее натуральное число, не превосходящее N. Из этого числа выделим цифры, каждую из которых возведем в куб и найдем сумму кубов;

· mas[5] – создадим массив из пяти элементов (максимальное число 32766 имеет пять разрядов) для хранения каждой цифры числа u. Объявим его как int;

· b – текущий номер цифры числа u при их выделении. Нумерация начинается с нуля, количество цифр числа u равно: b – 1. Объявим ее как int;

· sum – переменная, где ведется расчет суммы кубов цифр mas[i]. При обращении к ней необходимо её инициализировать нулем. Примем тип переменной – int;

· i – индексная переменная, изменяемая от 0 до b. Имеет тип int.

Алгоритм решения этой задачи следующий:

1) запрашивается значение числа N и проверяется его диапазон. Если N больше допустимого, то запрос повторяется;

2) организуется цикл переменной u от 1 до N;

3) расписываются цифры числа u в обратном порядке в массив mas ( в mas[0] – младший разряд, mas[b] – старший);

4) подсчитывается сумма кубов всех цифр, записанных в mas[0]-mas[b] в поле sum;

5) выполняется сравнение (u==sum). Если переменные равны, то выводятся результаты на печать, в противном случае меняется число u (u=u+1).

Программа для нашего примера на языке С будет иметь вид:

// Пример 2: Циклы for, while, структурное программирование

#include<stdio.h>

#include<math.h>

Void main(void)

{

unsigned int N;

int u,b,sum,i,mas[5];

For(;;)

{

printf("\nУкажите значение N (меньше 32766) > ");

scanf("%d",&N);

if(N<32766) break;

}

for(u=1;u<=N;u++)

{

b=0; mas[b]=u;

while(mas[b]>=10)

{

mas[b+1]=mas[b]/10;

mas[b++]=mas[b]%10;

}

sum=0;

for(i=0;i<=b;i++) sum+=pow(mas[i],3);

if(u==sum) printf("\nПриu=%dсумма кубов цифр равна=%d",u,sum);

}

}


Задание на лабораторную работу 5
РАЗРАБОТКА ПРОГРАММЫ СО СТРУКТУРОЙ «РАЗВИЛКА»