Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2013, 11:52   #1
СергейАстрахань
Новичок
Джуниор
 
Регистрация: 31.01.2013
Сообщений: 8
По умолчанию Олимпиадная задача 2

Колоду карт раздают по кругу, по одной карте каждому за раз, пока колода не кончится. Известен порядок карт в колоде. С кого должен начинать сдающий, чтобы первый игрок получил себе как можно больше тузов?

Формат входных данных

В первой строке вводятся два числа: количество игроков и количество карт в колоде (оба числа натуральные и не превосходят 100, количество карт делится на количество игроков).

Во второй строке через пробел перечислены достоинства карт в том порядке, в котором они идут в колоде (6 – шестерка, 7 – семерка, 8 – восьмерка, 9 – девятка, 10 – десятка, 11 – валет, 12 – дама, 13 – король, 14 – туз). В колоде может быть произвольное число карт каждого достоинства.

Формат выходных данных

Выведите одно число – номер игрока, с которого следует начинать сдавать, чтобы первый игрок получил как можно больше тузов (игроки нумеруются числами 1, 2, 3, ...; сдача происходит по возрастанию номеров начиная с некоторого до последнего, и затем продолжается с первого). Если вариантов ответа несколько, выведите любой из них.

Пример

Входные данные Выходные данные

5 10
9 9 9 14 8 7 11 6 14 6 3

3 3
14 14 14 1

Решите пожалуйста! Очень надо на зачет!
СергейАстрахань вне форума Ответить с цитированием
Старый 31.01.2013, 12:05   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Создать массив, размера равного числу игроков, инициализировать нулями.
В цикле читаем карты и при встрече туза прибавляем 1 к соответствующему элементу массива.
Находим максимум в массиве. Начинать надо с игрока N-(индекс максимума).
Код:
int *points = new int[N];
for(int i=0; i<N; ++i) points[i] = 0;
for(int i=0; i<cards; ++i) {
  std::cin >> card;
  if(card == CARD_ACE) ++points[i%N];
}
int max=0;
for(int i=0; i<N; ++i) max = points[max]<points[i]?i:max;
return N-max;
Abstraction вне форума Ответить с цитированием
Старый 31.01.2013, 16:04   #3
СергейАстрахань
Новичок
Джуниор
 
Регистрация: 31.01.2013
Сообщений: 8
По умолчанию

Спасибо большое.

Последний раз редактировалось СергейАстрахань; 31.01.2013 в 16:06. Причина: Отправил не ответом
СергейАстрахань вне форума Ответить с цитированием
Старый 31.01.2013, 16:46   #4
СергейАстрахань
Новичок
Джуниор
 
Регистрация: 31.01.2013
Сообщений: 8
По умолчанию

А вы не могли бы переписать в паскале?
СергейАстрахань вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
олимпиадная задача quade1992 Паскаль, Turbo Pascal, PascalABC.NET 0 17.05.2012 18:57
Олимпиадная задача Saidoz Паскаль, Turbo Pascal, PascalABC.NET 7 28.10.2011 13:02
олимпиадная задача danzel1 Общие вопросы C/C++ 2 21.10.2011 15:15
Олимпиадная задача. _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 1 09.12.2010 20:53
Олимпиадная задача Carbon Общие вопросы C/C++ 2 23.05.2007 22:07