Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 08.01.2014, 18:45   #21 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

А вообще, Лёша, мне кажется, запутали мы бедную Стасю совершенно. Поди, уж сама не рада, что к нам обратилась. Надо как-нибудь ее выпутать.
Vladimir_S вне форума   Ответить с цитированием
Старый 08.01.2014, 18:46   #22 (permalink)
Стася
Новичок
 
Регистрация: 03.12.2013
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
Если следовать логике Владимира, первая тройка без 0 в начале дает 69 вариантов, вторая тройка даст вычисленные нами 75 комбинаций, в целом по билету будет 69*75=5175 комбинаций. Полное же количество вариантов с 0 в начале первой тройки даст нам 75*75=5625 комбинаций номеров
Ну эти моменты с преподавателем выясним, если что) зато весело будет, глядишь, он про остальные вопросы и не вспомнит
Стася вне форума   Ответить с цитированием
Старый 08.01.2014, 18:49   #23 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
задача решается тривиально в этом случае
Ну нет, не пойдёт! Это даёт в ответе 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.
Vladimir_S вне форума   Ответить с цитированием
Старый 08.01.2014, 18:57   #24 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Я уже исправил, там надо дополнительное условие дописать, смотрите еще раз
Цитата:
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.
Как говорится, не умом, так брУтом

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

Полное решение у меня есть где-то в загашниках, лет семь назад с детишками разбирали эту задачу от и до на 4 языках программирования, а сегодня сам еле-еле вспомнил решение А всё некорректная формулировка задачи виновата
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 08.01.2014, 19:06   #25 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 08.01.2014, 19:14   #26 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Можно, но не нужно.
И вообще, хоть и с избыточным кодом, но моё, не стыренное

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

Насчет неоптимальности алгоритма - я же предупредил, что это вариант тупого перебора 9*10*10*10*10*10=900000 значений aka брут
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:37.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.