Информатика и технология программирования

         

Счастливые билеты


" Счастливым " называется билет, в котором в шестизначном номере сумма первых трех цифр равна сумме последних трех.

Шаг 1: Исходные данные и результат. Функция возвращает целое -количество " счастливых " билетов. Формальных параметров нет.

Шаг 2: Если известно, каким образом преобразовать шестизначное число в массив из 6 значений его цифр, то алгоритм будет состоять в последовательном разложении всех шестизначных чисел на цифры и проверки результата на " счастье " .


int calc()
{
int n; // Количество "счастливых" билетов


long v; // Проверяемое шестизначное число


int B[6]; // Массив значений цифр


for (n=0,v=0; v &#60 1000000; v++)
{
// Разложить val в массив значений цифр числа - B


if (B[0]+B[1]+B[2]==B[3]+B[4]+B[5]) n++;
}
return n;
}

Шаг 3: Остаток от деления целого числа на 10 дает значение младшей цифры, например 1996 % 10 = 6. Частное от деления целого числа на 10 дает то же самое число без последней цифры: 1996 / 10 = 199. Тогда остатки от последовательного деления на 10 исходного числа дадут искомые значения цифр (при условии, что частное от деления на следующем шаге становится делимым).


int m; // Номер шага (цифры)


long vv; // Исходное число


for (vv = v, m=0; m&#60 6; m++)
{
B[m] = vv % 10; // Остаток - очередная цифра


vv = vv / 10; // Частное становится делимым


}

Окончательный вариант:


//------------------------------------------------------bk32-03.cpp


//------Счастливые билеты


int calc()
{
int n, B[6];
long v;
for (n=0,v=0; v &#60 1000000; v++)
{
int m;
long vv;
for (vv = v, m=0; m&#60 6; m++, vv /=10)
B[m] = vv % 10;
if (B[0]+B[1]+B[2]==B[3]+B[4]+B[5]) n++;
}
return n;
}

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



Содержание раздела