@volcechat

Как оптимизировать программу?

Программа считает количество очков по правилам боулинга,принимая количество бросков и количество сбитых кегль за бросок.Программа выполняется за 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;
}
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 1
@majstar_Zubr
C++ & gamedev
Вывод в stdout и жизнь программы суть разные вещи.
Для ускорения вывода можно заменить std::endl на std::flush.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы