Description
This is my solution to a problem posted on Spoj.com called “Bowling (BOWLING1)”. The program first takes in a number N <= 1000, which is the number of test cases to follow. Then, the input will give a sequence of numbers between 0 and 10, representing the number of knocked down pins in a bowling game. Each test case is separated by a new line. The output should be the score obtained by the person who knocked down those exact pins.
Input/Output
Sample Input 3 10 10 10 10 10 10 10 10 10 10 10 10 3 5 1 5 7 1 10 1 6 10 6 2 1 2 0 5 8 1 9 1 5 0 3 0 8 1 6 4 7 2 7 1 6 3 10 4 4 | Sample Output 300 89 101 |
Code Sample
/******************************************************************************/ /* Author: Alejandro Hitti Brief: Bowling score calculator. Takes in the number of knocked down pins and returns the score, according to Bowling rules. All content (C) 2014-2015 Alejandro Hitti http://alejandrohitti.com. All rights reserved. */ /******************************************************************************/ // Includes //------------------------------------------------------------------------------ #include <iostream> #include <vector> const unsigned BufferSize = 256; int main (void) { unsigned numTests; char buffer[BufferSize]; std::vector<unsigned> pins; // Reserve 21 slots, since it's the max number of rounds that can be played pins.reserve(21); std::cin >> numTests; for (unsigned test = 0; test < numTests; ++test) { std::cin.getline(buffer, BufferSize); // Checking for new lines in Windows, Linux and Mac while ((std::cin.peek() != '\r\n') && (std::cin.peek() != '\n') && (std::cin.peek() != '\r')) { // Fill the container with the knocked down pins for the case unsigned input; std::cin >> input; pins.push_back(input); } unsigned shotNum = 0; unsigned score = 0; unsigned size = pins.size(); for (unsigned i = 0; i < size && shotNum < 20; ++i) { // Add the current number of pins score += pins[i]; // If it's a srike, add the current and next scores. Advance round. if (pins[i] == 10) { ++shotNum; score += pins[i + 1] + pins[i + 2]; } // If it's a spare, add the next score only. else if ((shotNum % 2) == 0 && (pins[i] + pins[i + 1] == 10)) { score += pins[i + 2]; } ++shotNum; } // Print the score and clear the container std::cout << score << std::endl; pins.clear(); } return 0; }