Русские мотоциклисты в Швейцарии, форум, блоги, новости, тестдрайвы и обзоры мотоциклов Русские мотоциклисты в Швейцарии, форум, блоги
19 Июня 2018, 16:00:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти

Новости: Мотоциклы, тест-драйвы и обзоры новинок. Тюнинг, ремонт и подготовка к спортбайков к треку.
 
   Портал   Помощь Календарь Войти Регистрация  
Страниц: [1] 2
  Печать  
Автор Тема: For ALX: сумма очков всех костей домино  (Прочитано 10476 раз)
Вадим
Ветеран
*****
Offline Offline

Сообщений: 1201



Просмотр профиля
« : 09 Июля 2007, 22:58:46 »

В общем, все правильно у нас вчера получилось, и нефиг было полчаса геморроиться. Если вспомнить умные формулы и культурно просуммировать, то будет покрасивее, если сюда еще рекурсию присовокупить, то еще красивее, но если тупо, как мы делали, то примерно так:

const int sumFrom1To6 = 21;
int sum = 0;
// цикл по наборам костей с равноценной половинкой от "пусто" до "6"
for (int i = 0; i < 7; i++)
{
  // тупо прибавляем сумму всех очков в наборе до 6 - противоположная от итерационной половина
  sum += sumFrom1To6;
  // патчим - вычитаем уже посчитанные на предыдущих итерациях
  for (int j = 0; j < i; j++)
    sum -= j;
  // добавляем сумму очков на итерационной половине
  sum += i * (7 - i);
}
 
Короче, объявляю конкурс на самый красивый алгоритм. Улыбка
Записан
admin
Швейцария / Цюрих
Администратор
Ветеран
*****
Offline Offline

Сообщений: 1424



Просмотр профиля
« Ответ #1 : 09 Июля 2007, 23:01:51 »

Я когда трезвый, то алгоритмы ненавижу. Улыбка
Записан

Тесты, обзоры мотоциклов, тестдрайвы мото и отзывы о мотоциклах
Ledvarnis
Местные
Ветеран
*
Offline Offline

Сообщений: 527



Просмотр профиля
« Ответ #2 : 09 Июля 2007, 23:03:53 »

"ПапЫ, вы это с кем разговариваете ?" (C)  Улыбка
Записан
Вадим
Ветеран
*****
Offline Offline

Сообщений: 1201



Просмотр профиля
« Ответ #3 : 09 Июля 2007, 23:07:01 »

"ПапЫ, вы это с кем разговариваете ?" (C)  Улыбка

Мы вчера рыбу ловили...
Записан
Вадим
Ветеран
*****
Offline Offline

Сообщений: 1201



Просмотр профиля
« Ответ #4 : 09 Июля 2007, 23:07:23 »

Я когда трезвый, то алгоритмы ненавижу. Улыбка

Дело поправимое...
Записан
solo
Постоялец
***
Offline Offline

Сообщений: 112


медвед-льодчег


Просмотр профиля
« Ответ #5 : 09 Июля 2007, 23:07:39 »

int i,j,sum = 0;
for( i=0; i<7; i++)
   for( j=i; j<7; j++)
       sum += i+j;
Записан

Подпись находится в разработке. Загляните попозже.
admin
Швейцария / Цюрих
Администратор
Ветеран
*****
Offline Offline

Сообщений: 1424



Просмотр профиля
« Ответ #6 : 09 Июля 2007, 23:38:50 »

Solo - лучший по алгоритмам. Улыбка Но фигня в том, что это был вопрос в игре "Как выиграть миллион" (или как она там называется). И не всякий "моск" может такой алгоритм вычислить. А вывести формулу, которую можно посчитать хотя бы калькулятором, мы под пиво смогли, но сейчас я ее не помню. Улыбка
Записан

Тесты, обзоры мотоциклов, тестдрайвы мото и отзывы о мотоциклах
Вадим
Ветеран
*****
Offline Offline

Сообщений: 1201



Просмотр профиля
« Ответ #7 : 09 Июля 2007, 23:45:29 »

int i,j,sum = 0;
for( i=0; i<7; i++)
   for( j=i; j<7; j++)
       sum += i+j;



Мала букафф. Улыбка Но суть та же.
Я попытался привлечь моск для другого подхода:

  int sum = 0;
  for (int i = 0; i < 7; i++)
    sum += (7 - (double) i) / 2 * (i + 6) + i * (7 - i);

или, если упростить и скрыть суть тела цикла, то получится так:

    sum += (3 * (double) i / 2 + 3) * (7 - i);


Записан
solo
Постоялец
***
Offline Offline

Сообщений: 112


медвед-льодчег


Просмотр профиля
« Ответ #8 : 10 Июля 2007, 01:11:49 »

Solo - лучший по алгоритмам. Улыбка Но фигня в том, что это был вопрос в игре "Как выиграть миллион" (или как она там называется). И не всякий "моск" может такой алгоритм вычислить. А вывести формулу, которую можно посчитать хотя бы калькулятором, мы под пиво смогли, но сейчас я ее не помню. Улыбка


афигеть, дайте две.
пилим все доминошки пополам (рекомендую пилить мысленно) - на квадратики. получаем 7 квадратиков с нулями, 7 с единичками, 7 с двойками и т.д. т.е. все это вместе - сумма арифм. прогрессии от 0 до 6ти, умноженная на 7.
сумма прогрессии
(0+6)*7/2 = 21
умноженная на 7
147
не так?
« Последнее редактирование: 10 Июля 2007, 01:15:09 от solo » Записан

Подпись находится в разработке. Загляните попозже.
admin
Швейцария / Цюрих
Администратор
Ветеран
*****
Offline Offline

Сообщений: 1424



Просмотр профиля
« Ответ #9 : 10 Июля 2007, 01:13:24 »

147
не так?

Ты бы сравнил результат со своим алгоритмом. Он правильный. Улыбка
Записан

Тесты, обзоры мотоциклов, тестдрайвы мото и отзывы о мотоциклах
solo
Постоялец
***
Offline Offline

Сообщений: 112


медвед-льодчег


Просмотр профиля
« Ответ #10 : 10 Июля 2007, 01:34:31 »

гы, лажа получилась. 7 с нулями, 7 с 1-ми, и т.д. всего получится 49, а должно делиццо на 2.

на самом деле будет 8 с нулями, 8 с единичками и т.д. т.е. сумму прогрессии надо умножать на 8
21*8=168
Ты бы сравнил результат со своим алгоритмом. Он правильный

это не спортивно. Улыбка
Записан

Подпись находится в разработке. Загляните попозже.
Вадим
Ветеран
*****
Offline Offline

Сообщений: 1201



Просмотр профиля
« Ответ #11 : 10 Июля 2007, 01:37:52 »

афигеть, дайте две.
пилим все доминошки пополам (рекомендую пилить мысленно) - на квадратики. получаем 7 квадратиков с нулями, 7 с единичками, 7 с двойками и т.д. т.е. все это вместе - сумма арифм. прогрессии от 0 до 6ти, умноженная на 7.
сумма прогрессии
(0+6)*7/2 = 21
умноженная на 7
147
не так?

Гы! Вот ты и попал! Дубли забыл правильно посчитать! Мы тоже с ними вчера сначала попали.
Записан
Вадим
Ветеран
*****
Offline Offline

Сообщений: 1201



Просмотр профиля
« Ответ #12 : 10 Июля 2007, 21:06:07 »

Несмотря на то, что распределение очков по костям неравномерное, оно тем не менее симметричное, поэтому можно тупо брать среднее. Среднее между 0 и 12 - очевидно, 6. Умножаем 6 на 28 костей и получаем искомые 168. Улыбка

Если кому-то не нравится брать среднее от набора с неравномерным распределением, можно поломать все кости пополам и получить набор с равномерным распределением. Затем тем же подходом взять среднее между 0 и 6 - это 3 - и умножить его на 56 половинок. Улыбка
Записан
admin
Швейцария / Цюрих
Администратор
Ветеран
*****
Offline Offline

Сообщений: 1424



Просмотр профиля
« Ответ #13 : 10 Июля 2007, 21:24:29 »

Во, самый простой способ подсчета найден. Улыбка
Записан

Тесты, обзоры мотоциклов, тестдрайвы мото и отзывы о мотоциклах
CHe
Старожил
****
Offline Offline

Сообщений: 358



Просмотр профиля
« Ответ #14 : 25 Июля 2007, 22:31:39 »

и такой вот фигней люди на рыбалке занимаются. совсем без меня от рук отбились...
Записан
Страниц: [1] 2
  Печать  
 
Перейти в:  

Швейцария. Русский форум портала SWISSБЛОГ (Свиссблог). (с) 2007-2010

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines | Sitemap Valid XHTML 1.0! Valid CSS!