Сережа и Дима играют в игру.Перед игроками лежат в ряд n карточек,На каждой карточке написано число, причем все числа на карточках различны,Игроки ходят по очереди, первый ходит Сережа. На свой ход можно забрать себе одну карточку: либо самую левую карточку из ряда, либо самую правую. Игра заканчивается, когда в ряду не осталось карточек. Выигрывает тот, у кого в конце игры сумма чисел на взятых карточках больше. каждый из них из двух карточек выбирает ту, на которой написано большее число. помогите решить задачу
входные данные
4
4 1 2 10
выходные данные
12 5
Сережа возьмет карточки с числами 10 и 2, таким образом сумма Сережи 12. Дима возьмет все остальные карточки с суммой 5.
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, sergo = 0, dima = 0, m, k, c;
cin >> n;
vector <int> v(n);
for(int i = 0; i < n; i++){
cin >> v[i];
}
for(int i = 0; i < n; i++){
if(v[i] > v.back() - i){
sergo = sergo + v[i];
v.erase(v.begin());
}else{
sergo = sergo + v.back();
v.pop_back();
}
if(v[i] > v.back() - i){
dima = dima + v[i];
v.erase(v.begin());
}else{
dima = dima + v.back();
v.pop_back();
}
}
cout << sergo << dima;
}
Я бы взял дек и сделал так:
int main()
{
deque<int> d;
int N, score[2] = { 0 };
cin >> N;
for(int i = 0, n; i < N; ++i)
{
cin >> n;
d.push_back(n);
}
N = 0;
while(!d.empty())
{
if (d.back() > d.front())
{
score[N] += d.back();
d.pop_back();
}
else
{
score[N] += d.front();
d.pop_front();
}
N = 1 - N;
}
cout << score[0] << " " << score[1] << endl;
}
Вы пытаетесь работать с вектором, что неудобно, и в одной итерации цикла обрабатывать (и удалять) сразу 2 элемента, что приводит к ошибке...
Хм, у меня вышло что-то вроде такого..
#include <iostream>
#include <vector>
int main()
{
std::vector<int> cards;
int dimaScore = 0;
int sergeiScore = 0;
int cardsQnt = 0;
std::cout << "Enter cards qunatity : ";
std::cin >> cardsQnt;
for (int i = 0; i < cardsQnt; i++)
{
int card;
std::cout << "Enter card #" << i << ": ";
std::cin >> card;
cards.push_back(card);
}
while (!cards.empty())
{
//Ход Cережи
if(cards.back() > cards[0])
{
sergeiScore += cards.back();
cards.pop_back();
}else
{
sergeiScore += cards[0];
cards.erase(cards.begin());
}
//Ход Димы
if(!cards.empty())
{
if (cards.back() > cards[0])
{
dimaScore += cards.back();
cards.pop_back();
}
else
{
dimaScore += cards[0];
cards.erase(cards.begin());
}
}
}
std::cout << "Sergei is : " << sergeiScore << std::endl;
std::cout << "Dima is :" << dimaScore << std::endl;
system("pause");
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости