Логические задачи и головоломки
26 Май 2012, 11:05:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости:
 
   Начало   Правила Помощь Поиск Войти Регистрация Чат  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Задача с числами  (Прочитано 772 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Базика
Новичок
*
Offline Offline

Сообщений: 4


Просмотр профиля
« : 26 Май 2011, 21:16:34 »

Помогите пожалуйста решить задачу:
Вычислить рекурсивно число шестизначных чисел, у которых сумма первых четырёх цифр равна 26, а сумма последних двух равна 14.
Записан
devnull
Старожил
****
Offline Offline

Сообщений: 455


Просмотр профиля
« Ответ #1 : 26 Май 2011, 22:01:24 »

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

функция сумма (параметр: число)
  если число = 0
     то вернуть 0
     иначе вернуть (число % 10) + сумма(число / 10)

Здесь число % 10 обозначает остаток от деления числа на 10, а число/10 - это целочисленное деление на десять.
Ну а потом надо только убедиться что сумма всех цифр числа равна 26+14=40, а сумма последних двух = 14.

 
Записан
Базика
Новичок
*
Offline Offline

Сообщений: 4


Просмотр профиля
« Ответ #2 : 26 Май 2011, 22:35:59 »

но таким способом можно проверить на заданные условия только конкретные числа, а как определить сколько всего существует таких чисел?
Записан
devnull
Старожил
****
Offline Offline

Сообщений: 455


Просмотр профиля
« Ответ #3 : 26 Май 2011, 23:49:06 »

Цикл от 100000 до 999999 ?
Записан
zhekas
Старожил
****
Offline Offline

Сообщений: 405



Просмотр профиля Email
« Ответ #4 : 27 Май 2011, 00:21:59 »

Цикл от 100000 до 999999 ?

достаточно разбить задачу на 2:

1) Сумма цифр четырёхзначного числа равна 26

2) Сумма цифр двухзначного числа равна 14

это намного упростит перебор
Записан
Базика
Новичок
*
Offline Offline

Сообщений: 4


Просмотр профиля
« Ответ #5 : 27 Май 2011, 00:23:24 »

Вы не могли бы ещё пояснить действие в функции: почему если число не ноль нужно найти его остаток от деления на 10(почему на 10?) и сложить со значением функции, поделённом на 10?
Записан
zhekas
Старожил
****
Offline Offline

Сообщений: 405



Просмотр профиля Email
« Ответ #6 : 27 Май 2011, 00:23:46 »

плюс подсчёт можно совершать, не перебирая все цифры
Записан
zhekas
Старожил
****
Offline Offline

Сообщений: 405



Просмотр профиля Email
« Ответ #7 : 27 Май 2011, 00:29:22 »

всегда путаюсь. Первые четыре цифры - это, начиная с разряда единиц или разряда сотен тысяч
Записан
zhekas
Старожил
****
Offline Offline

Сообщений: 405



Просмотр профиля Email
« Ответ #8 : 27 Май 2011, 00:58:44 »

если речь зашла о программировании, то данная задача решается намного быстрее именно через рекурсивную функцию

f(n,a,b)      -   это целочисленная функция, которая возвращает количество чисел, рангом n, сумма цифр которых равна a. b - показывает можно ли, чтобы первая цифра была нулевой или нет.

итак тело функции

заведём счётчик k, который будет суммировать варианты.

k=0;

if (a>9*n)или(a<0)
то функции присваиваем значение 0 и выходим из функции

иначе

если (n=1)

то функции присваеваем 1 и выходим из функции

иначе

заводим счётчик i это цифра в нашем числе, с которой мы работаем.

for i=b to 9 do
k:=k+f(n-1,a-i,0);

присваеваем фукции значение k и выходим из данной функции


соотвтвенно

вам надо найти

f(4,26,1)*f(2,14,0)




Записан
Базика
Новичок
*
Offline Offline

Сообщений: 4


Просмотр профиля
« Ответ #9 : 28 Май 2011, 04:00:42 »

Спасибо большое за помощь!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC | Sitemap