Есть задача: Подсчитать количество “счастливых” шестизначных автобусных билетов, т. е. таких, в номерах которых сумма первых трех цифр равна сумме трех последних.
Написал к ней алгоритм в делфи:
var
a,b,c,d,e,f:integer;
g:integer;
begin
g:=0;
for a:=0 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
for d:=0 to 9 do
for e:=0 to 9 do
for f:=0 to 9 do
if a+b+c=d+e+f then
g:=g+1;
Edit1.Text:=Inttostr(g);
end;
Но препод сказал, что надо использовать одномерный массив, а я не могу понять куда его можно всунуть, помогите: 33
Другие языки программирования и технологии
Программирование. 1 курс.
Дополню ответ Деда Мазая. Число билетов для заданной суммы трёх цифр равно квадрату кол-ва вариантов получения этой суммы.
var
i, j, k, res: integer;
cnt: array[0..27] of integer;
begin
for i := 0 to 9 do for j := 0 to 9 do for k := 0 to 9 do inc(cnt[i + j + k]);
for i := 0 to 27 do inc(res, sqr(cnt[i]));
writeln(res)
end.
Вместо 1000000 итераций исходного варианта получаем 1028.
var
i, j, k, res: integer;
cnt: array[0..27] of integer;
begin
for i := 0 to 9 do for j := 0 to 9 do for k := 0 to 9 do inc(cnt[i + j + k]);
for i := 0 to 27 do inc(res, sqr(cnt[i]));
writeln(res)
end.
Вместо 1000000 итераций исходного варианта получаем 1028.
Володя Чухалов
Что-то по твоему алгоритму явно пошло не так ахаха

Если в результате задания получилось то, что надо и даже быстрее ее алгоритма, то думаю вы его выполнили даже на дважды отлично.
А препод тупой тогда, если думал, что вы будете использовать один цикл и разбор вести числа на цифры
Задания:
"Подсчитать количество “счастливых” шестизначных автобусных билетов"
"Подсчитать количество ВСЕХ “счастливых” шестизначных автобусных билетов"
все же разные, так что может препод и прав требуя так
А препод тупой тогда, если думал, что вы будете использовать один цикл и разбор вести числа на цифры
Задания:
"Подсчитать количество “счастливых” шестизначных автобусных билетов"
"Подсчитать количество ВСЕХ “счастливых” шестизначных автобусных билетов"
все же разные, так что может препод и прав требуя так
Володя Чухалов
Спасибо конечно, но ответ немного не по теме: 3 Может лучше подскажете как сделать с этим массивом?
Нет смысла перебирать все 6 цифр, это очень долго. Задачу можно решить перебрав только 3 цифры. Потребуется массив 0..27. В каждом элементе массива будем подсчитывать число вариантов, которое даёт эту сумму.
Если сумму можно получить N способами, значит эта сумма даёт N*N вариантов счастливого билета.
Например, суммы 0 и 27 можно получить только одним способом.
Суммы 1 и 26 можно получить тремя способами.
И т. д. Отсюда видно, что массив и перебор вариантов можно сократить в 2 раза.
Если сумму можно получить N способами, значит эта сумма даёт N*N вариантов счастливого билета.
Например, суммы 0 и 27 можно получить только одним способом.
Суммы 1 и 26 можно получить тремя способами.
И т. д. Отсюда видно, что массив и перебор вариантов можно сократить в 2 раза.
Ivan Kosolapov
> И т. д. Отсюда видно, что массив и перебор вариантов можно сократить в 2 раза.
Тут я ошибся. Массив уменьшить можно, но не знаю, есть ли простой способ сильно сократить перебор.
Тут я ошибся. Массив уменьшить можно, но не знаю, есть ли простой способ сильно сократить перебор.
Pascal, на Delphi не пишу




Похожие вопросы
- C++, программирование, 1 курс.
- Что нужно знать на 1 курсе программирования в вузе? Чему учат на 1 курсе?
- В школах изучают программирование, везде курсы бесплатные для программистов. Почему большинство людей еще не пидо
- Можно ли выучить любой один язык программирования на курсах? А не в универах и институтах?
- с чего начать изучение программирования? Литература, курсы итд ..
- Подскажите как можно научиться программированию без курсов?
- Целесообразно ли при обучении программированию включать курс ассемблера?
- Почему в России такая плохая система образования, особенно программирования и курсы, и вузы и колледжи дерьмо?
- Стоит ли уходить с Универа если я не вытягиваю и это мягко сказано. 1 курс учусь на программиста.
- си. для начинающих. 1 курс.