Я решаю следующую простую задачу (на одном из сайтов OnlineJugde на русском языке, поэтому здесь я не буду давать ссылку :). Легче изложить проблему с помощью примера, чем определения.
Ввод:
10 // this is N, the number of the integers to follow
1 1 1 2 2 3 3 1 4 4
Выход:
3 times 1.
2 times 2.
2 times 3.
1 times 1.
2 times 4.
Ограничения:
Все числа на входе (включая N ) имеют положительное целое число, меньшее 10000 .
Вот код, который я получил Принято с:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int prevNumber = -1;
int currentCount = 0;
int currentNumber;
while(n --> 0) // do n times
{
cin >> currentNumber;
if(currentNumber != prevNumber)
{
if(currentCount != 0) //we don't print this first time
{
cout << currentCount << " times " << prevNumber << "." << endl;
}
prevNumber = currentNumber;
currentCount = 1;
}
else //if(currentNumber == prevNumber)
{
++currentCount;
}
}
cout << currentCount << " times " << prevNumber << "." << endl;
}
Теперь вот моя проблема. Тихий голос внутри меня говорит мне, что я делаю эту строку два раза:
cout << currentCount << " times " << prevNumber << "." << endl;
Я сказал тому голосу внутри себя, что, возможно, можно было бы избежать печати отдельно в конце. Он сказал мне, что тогда, возможно, будет слишком много if
и else
для такой простой проблемы. Теперь я не хочу сделать код короче . Я также не хочу минимизировать количество if
и else
. Но я делаю хочу избавиться от специальной печати в конце цикла, не усложняя код.
Я действительно считаю, что эту простую проблему можно решить с помощью более простого кода, чем мой. Надеюсь, я был ясен, и вопрос не будет считаться неконструктивным:)
Заранее спасибо.