Проконсультируем прямо сейчас
Мы онлайн в наших сообществах. ПН - ВС 08:00-22:00
ÐапиÑать программу Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтва шеÑтизначных «ÑчаÑтливых» билетов, у которых Ñумма первых 3 деÑÑтичных цифр
От нашего клиента с логином HdmsbQ на электронную почту пришел вопрос: "ÐапиÑать программу Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтва шеÑтизначных «ÑчаÑтливых» билетов, у которых Ñумма первых 3 деÑÑтичных цифр" это здание мы отнесли к разделу ЕГР(школьный). Так как клиент является зарегистрированным пользователем нашего сайта, то мы бесплатно предоставим ответ.
ЕГР(школьный) - довольно сложный раздел, здесь действительно попадаются вопросы, которые даже у специалиста с законченным высшим образованием поставят в тупик при подготовке правильного ответа. Но мы известны тем, что сложности нас не останавливают, а наоборот развивают и расширяют наши знания.
Вы спрашивали ÐапиÑать программу Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтва шеÑтизначных «ÑчаÑтливых» билетов, у которых Ñумма первых 3 деÑÑтичных цифр? - отвечаем:
Решение принималоÑÑŒ к раÑÑмотрению, еÑли программа выдавала правильный ответ  - 55252.
1) Самое проÑтое - Ñто перебрать вÑе возможные комбинации шеÑти цифр и подÑчитать чиÑло "ÑчаÑтливых" билетов.
Count:=0; {количеÑтво "ÑчаÑтливых" билетов}
for a1:=0 to 9 do
for a2:=0 to 9 do
for a3:=0 to 9 do
for a4:=0 to 9 do
for a5:=0 to 9 do
for a6:=0 to 9 do
if a1+a2+a3=a4+a5+a6
then Count:=Count+1;
или Ñледующий вариант:
Count:=0;
for t:=0 to 999999 do  begin
a1:=t div 100000;
a2:=t div 10000 mod 10;
a3:=t div 1000 mod 10;
a4:=t div 100 mod 10;
a5:=t div 10 mod 10;
a6:=t mod 10;
if a1+a2+a3=a4+a5+a6 then count:=count+1;
end;
УÑловие if во вложенных циклах будет проверÑтьÑÑ 10^6 раз, поÑтому будем говорить, что ÑложноÑть Ñтих алгоритмов 10^6.
2) Обратим внимание на то, что в "ÑчаÑтливом" билете поÑледнÑÑ Ñ†Ð¸Ñ„Ñ€Ð° a6 однозначно определÑетÑÑ Ð¿ÐµÑ€Ð²Ñ‹Ð¼Ð¸ пÑтью:
a6=(a1+a2+a3)-(a4+a5).
ЕÑли 0<=a6<=9, то билет "ÑчаÑтливый", иначе - нет. Таким образом, мы можем убрать шеÑтой вложенный цикл:
Count:=0;
for a1:=0 to 9 do
for a2:=0 to 9 do
for a3:=0 to 9 do
for a4:=0 to 9 do
for a5:=0 to 9 do
begin
a6:=(a1+a2+a3)-(a4+a5);
if (a6>=0) and (a6<=9)
then Count:=Count+1;
end;
СложноÑть алгоритма 10^5.
3) ЕÑли комбинаций a1 a2 a3 первых трех цифр Ñ Ñуммой T=a1+a2+a3 наÑчитываетÑÑ C[T], то вÑего "ÑчаÑтливых" билетов Ñ Ñуммой половины T=a1+a2+a3=a4+a5+a6 будет C[T]*C[T]. Ð’Ñех возможных Ñумм T-28 (от 0=0+0+0 до 27=9+9+9). ПодÑчитаем C[i], i=0, ..., 28, затем найдем интереÑующее Ð½Ð°Ñ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтво "ÑчаÑтливых" билетов
C[0]2 + C[1]2 + ... + C[27]^2.
Заметим, что "ÑчаÑтливых" билетов Ñ Ñуммой T Ñтолько же, Ñколько и Ñ Ñуммой 27-T. ДейÑтвительно, еÑли билет a1 a2 a3 a4 a5 a6 Ñ Ñуммой T - "ÑчаÑтливый", то таковым же ÑвлÑетÑÑ Ð¸ билет (999999 - a1 a2 a3 a4 a5 a6) Ñ Ñуммой 27-T. ПоÑтому чиÑло билетов можно вычиÑлÑть и по формуле
2*(C[0]2+ ... +C[13]2),
Ñ‚.е.раÑÑматривать только Ñуммы T от 0 до 13.
Count:=0;
for T:=0 to 13 do C[T]:=0;
for a1:=0 to 9 do {перебираем вÑе}
for a2:=0 to 9 do {возможные a1 a2 a3}
for a3:=0 to 9 do
begin
T:=a1+a2+a3;
C[T]:=C[T]+1 {нашли еще один билет}
end; {Ñ Ñуммой T}
for T:=0 to 13 do {Ñчитаем чиÑло билетов} Count:=Count+C[T]*C[T];
Count:=Count*2; {удваиваем Ñумму}
или Ñледующий вариант
count:=0;
for t:=0 to 27 do c[t]:=0;
for t:=0 to 999 do begin
a1:=t div 100;
a2:=t div 10 mod 10;
a3:=t mod 10;
c[a1+a2+a3]:=c[a1+a2+a3]+1;
end;
for t:=0 to 27 do count:=count+c[t]*c[t];
СложноÑть Ñтих алгоритмов 10^3.