Программа считает количество очков по правилам боулинга,принимая количество бросков и количество сбитых кегль за бросок.Программа выполняется за 2.5 секунды,а требуется за 1 секунду.
#include <iostream>
using namespace std;
int main()
{
int throws; // переменная,в которой будет храниться количество бросков
int i;
int sum = 0;// cумма очков
cout << "Enter the number of throws: > ";
while (!(cin >> throws) || (cin.peek() != '\n') || (throws < 1)) //цикл,отвечающий за проверку вводимых типов
{
//cin.peek проверяет,закончен ли ввод символов
cin.clear();//удаляем флаг ошибки,чтобы в дальнейшем можно было еще раз ввести количество бросков
while (cin.get() != '\n');//заставляет систему ждать от пользователя ввода символа
cout << "Error!\n" << "Enter number > ";
}
int* p_score = new int[throws];
for (i = 0; i < throws; i++)
{
cout << "Enter o4ki v broske pod nomerom " << "[" << i+1 << "]" << " > ";
while (!(cin >> p_score[i]) || (cin.peek() != '\n') || (p_score[i] < 0) || (p_score[i] > 10)) //цикл,отвечающий за проверку вводимых типов
{ //cin.peek проверяет,закончен ли ввод символов
cin.clear();//удаляем флаг ошибки,чтобы в дальнейшем можно было еще раз ввести количество сбитых кегль
while (cin.get() != '\n');//заставляет систему ждать от пользователя ввода символа
cout << "Error!\n" << "Enter number > ";
}
}
// цикл ниже должен считать сумму очков после всех проведенных бросков
//правила подсчета очков:
//Strike: игрок сбивает 10 кеглей первым броском, очки в этом туре начисляются из расчета – 10 + сумма очков за два последующих броска.
//Spare: игрок сбивает 10 кеглей двумя бросками, очки в этом туре начисляются из расчета – 10 + сумма очков за один последующий бросок.
for (i = 0; i < throws; i++)
{
if (p_score[i] == 10)
{
if ((((i + 1) < throws) && ((i + 2) < throws)) && (sum < 300))
{
sum = p_score[i] + p_score[i + 1] + p_score[i + 2] + sum;
cout << "\n" << sum << " " << i + 1 << endl;//сделано для сампопроверки
}
else if ((i == (throws - 2)) && (sum < 300))
{
sum = sum + p_score[i] + p_score[i + 1];
cout << "\n" << sum << " " << i + 1 << endl;//сделано для сампопроверки
}
else if ((i == (throws - 1)) && (sum < 300))
{
sum = sum + p_score[i];
cout << "\n" << sum << " " << i + 1 << endl;//сделано для сампопроверки
}
}
else if ((p_score[i] + p_score[i + 1] == 10) && (sum < 300))
{
if (((i + 2) < throws) && (sum < 300))
{
if (p_score[i] != (p_score[i + 2]))
{
sum = sum + p_score[i] + p_score[i + 2];
cout << "\n" << sum << " " << i + 1 << endl;//сделано для сампопроверки
}
else
{
sum = sum + p_score[i];
cout << "\n" << sum << " " << i + 1 << endl;//сделано для сампопроверки
}
}
else if (sum < 300)
{
sum = sum + p_score[i];
cout << "\n" << sum << " " << i + 1 << endl;//сделано для сампопроверки
}
}
else if (((p_score[i] + p_score[i + 1]) != 10) && (p_score[i] != 10) && (sum < 300))
{
sum = sum + p_score[i];
cout << "\n" << sum << " " << i + 1 << endl;//сделано для сампопроверки
}
}
delete p_score;
cout << "\n" << sum;
return 0;
}