2023 [11] Компьютерная игра
В компьютерной игре общий рейтинг команды определяется набором персонажей и их влиянием друг на друга. Каждый персонаж может влиять на рейтинг команды как положительно, так и отрицательно. В команды можно включать несколько персонажей одного типа.
Для вычисления общекомандного рейтинга необходимо учесть взаимные веса всех возможных пар персонажей внутри команды, включая влияние одинаковых персонажей друг на друга.
Например, рассмотрим таблицу взаимных весов персонажей.
Если команда состоит из двух персонажей, то наибольший рейтинг будет равен 5 у команды, состоящей из Персонажа 1 и Персонажа 3.
Если в команду будут входить Персонаж 1 (П1), Персонаж 2 (П2) и Персонаж 3 (П3), то рейтинг команды будет равен сумме рейтингов всех пар персонажей команды: (П1-П2), (П1-П3), (П2-П3):
-3 + 5 + 1 = 3.
Если в команду будет входить Персонаж 1 (П1) и два персонажа 3 (П3), то рейтинг команды будет равен сумме рейтингов всех пар персонажей команды: (П1-П3), (П1-П3), (П3-П3):
5 + 5 + 0 = 10.
На основе таблицы взаимных весов персонажей определите команду из пяти персонажей, которая будет иметь НАИБОЛЬШИЙ общекомандный рейтинг. Допускается брать не более двух персонажей одного типа в команду. В ответе укажите имена, количество персонажей и значение общекомандного рейтинга.
Показать подсказку
Сколько всего комбинаций из пяти персонажей с повторами не более двух одинаковых персонажей?
Показать решение
Необходимо перебрать все возможные комбинации из трех персонажей (их всего 120). Для каждой посчитать общий рейтинг и найти команду с максимальным рейтингом.
Для упрощения поиска можно написать программу, перебирающую все возможные комбинации и выводящую максимальное значение рейтинга на экран.
Листинг на языке C
#include <iostream>
using namespace std;
int main()
{
intA[10][10]={
{0,-7,2,-6,3,-4,-5,-4,6,-1},
{-7,0,1,-5,3,5,7,-2,-5,8},
{2,1,0,-4,-9,5,-1,1,4,-2},
{-6,-5,-4,0,4,-7,5,-3,-5,-2},
{3,3,-9,4,0,3,3,6,-9,-4},
{-4,5,5,-7,3,0,-5,-2,3,-7},
{-5,7,-1,5,3,-5,0,3,1,-4},
{-4,-2,1,-3,6,-2,3,0,-1,-8},
{6,-5,4,-5,-9,3,1,-1,0,6},
{-1,8,-2,-2,-4,-7,-4,-8,6,0}
};
int sumMax=-100, sum;
int p1,p2,p3,p4,p5;
int counter;
for (int i1 = 0; i1 < 10; i1++)
for (int i2 = 0; i2 < 10; i2++)
for (int i3 = 0; i3 < 10; i3++)
for (int i4 = 0; i4 < 10; i4++)
for (int i5 = 0; i5 < 10; i5++)
{
// считаем число повторов
// персонажа 1
counter = 1;
if (i1 == i2)
counter++;
if (i1 == i3)
counter++;
if (i1 == i4)
counter++;
if (i1 == i5)
counter++;
// если персонажей больше 2
// переходим на след итерацию
if (counter > 2)
continue;
// считаем число повторов
// персонажа 2
counter = 1;
if (i2 == i3)
counter++;
if (i2 == i4)
counter++;
if (i2 == i5)
counter++;
if (counter > 2)
continue;
// считаем число повторов
// персонажа 3
counter = 1;
if (i3 == i4)
counter++;
if (i3 == i5)
counter++;
if (counter > 2)
continue;
sum = A[i1][i2] + A[i1][i3] + A[i1][i4] + A[i1][i5] + A[i2][i3] + A[i2][i4] + A[i2][i5] + A[i3][i4] + A[i3][i5] + A[i4][i5];
if (sumMax <= sum)
{
sumMax = sum;
p1 = i1 + 1;
p2 = i2 + 1;
p3= i3 + 1;
p4= i4 + 1;
p5= i5 + 1;
}
}
cout << "Сумма " << sumMax << "\nПерсонажи " << p1 << "," << p2 << "," << p3 << "," << p4 << "," << p5;
}
Результат выполнения программы:
Сумма 40
Персонажи 7,7,5,2,2 (2 друида, 2 война, рыцарь)
Показать ответ
Максимальная сумма – 40.
Персонажи: 2 Рыцаря, 1 Воин, 2 Друида.
<< Назад в раздел (Все задания)