• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задача о счастливых числах

А вообще, Лёша, мне кажется, запутали мы бедную Стасю совершенно. Поди, уж сама не рада, что к нам обратилась. Надо как-нибудь ее выпутать. :D
 
Если следовать логике Владимира, первая тройка без 0 в начале дает 69 вариантов, вторая тройка даст вычисленные нами 75 комбинаций, в целом по билету будет 69*75=5175 комбинаций. Полное же количество вариантов с 0 в начале первой тройки даст нам 75*75=5625 комбинаций номеров :))

Ну эти моменты с преподавателем выясним, если что) зато весело будет, глядишь, он про остальные вопросы и не вспомнит:))
 
задача решается тривиально в этом случае
Ну нет, не пойдёт! Это даёт в ответе 144. Надо так:
Код:
var 
 n,m,x,y,z:integer;
begin
 n:=0;
 for x:=1 to 9 do
  for y:=0 to 9 do
   for z:=0 to 9 do
    if x+y+z=13 then inc(n);
 m:=0;
 for x:=0 to 9 do
  for y:=0 to 9 do
   for z:=0 to 9 do
    if x+y+z=13 then inc(m);
 writeln('n=',n*m);
 readln
end.
 
Я уже исправил, там надо дополнительное условие дописать, смотрите еще раз :))
var a,b,c,x,y,z,n:integer;
begin
n:=0;
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
for x:=0 to 9 do
for y:=0 to 9 do
for z:=0 to 9 do
if (x+y+z=13) and (a+b+c=13) then inc(n);
writeln('n=',n);
readln
end.
Как говорится, не умом, так брУтом :D

А в целом для решения задачи в целом нафиг не нужно было заводить массив, можно было обойтись дополнительной переменной :))

Полное решение у меня есть где-то в загашниках, лет семь назад с детишками разбирали эту задачу от и до на 4 языках программирования, а сегодня сам еле-еле вспомнил решение :)) А всё некорректная формулировка задачи виновата :D
 
if ((x+y+z=13) or (a+b+c=13)) and (a+b+c=x+y+z) then inc(n);
Избыточно! Можно короче:
if (x+y+z=13) and (a+b+c=13) then inc(n);
Кроме того - нерационально: мой вариант (с n и m) предполагает 2000 прохождений цикла, а Ваш - 1000000 (грубо говоря). Тогда уж проще тупым перебором, как у меня в программе. Те же 900000.
 
Можно, но не нужно.
И вообще, хоть и с избыточным кодом, но моё, не стыренное :))

Есть фирмы, где программистам платят по количеству строк кода, так там такое накручивают, что мой избыточный код - не более чем шалость :), но вы правы, исправлю сейчас.

Насчет неоптимальности алгоритма - я же предупредил, что это вариант тупого перебора 9*10*10*10*10*10=900000 значений aka брут :))
 
Назад
Сверху