Счастливые билеты
" Счастливым " называется билет, в котором в шестизначном номере сумма первых трех цифр равна сумме последних трех.
Шаг 1: Исходные данные и результат. Функция возвращает целое -количество " счастливых " билетов. Формальных параметров нет.
Шаг 2: Если известно, каким образом преобразовать шестизначное число в массив из 6 значений его цифр, то алгоритм будет состоять в последовательном разложении всех шестизначных чисел на цифры и проверки результата на " счастье " .
int calc()
{
int n; // Количество "счастливых" билетов
long v; // Проверяемое шестизначное число
int B[6]; // Массив значений цифр
for (n=0,v=0; v < 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< 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 < 1000000; v++)
{
int m;
long vv;
for (vv = v, m=0; m< 6; m++, vv /=10)
B[m] = vv % 10;
if (B[0]+B[1]+B[2]==B[3]+B[4]+B[5]) n++;
}
return n;
}
На первый взгляд такое количество шагов в последовательной детализации программы может показаться излишним. На самом деле программист должен делать их не на бумаге и не на экране монитора, а у себя в голове, превращая словесную формулировку некоторой части алгоритма в формальную запись на языке программирования, в которой тем не менее остаются неформализованные куски.