gpt4 book ai didi

c++ - 如何重构这个简单的代码以避免代码重复?

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:42 25 4
gpt4 key购买 nike

我正在解决以下简单问题(在一个俄语版的 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;

我告诉内心的那个声音,说不定最后可以避免单独打印。它告诉我,对于这样一个简单的问题,可能会有太多的 ifelse。现在,我不想让代码更短。我也不想最小化 ifelse 的数量。 但我确实想在不使代码更复杂的情况下摆脱循环末尾的特殊打印。

我真的相信这个简单的问题可以用比我的代码更简单的代码来解决。希望我说得很清楚,这个问题不会被视为没有建设性:)

提前致谢。

最佳答案

我想到了这个。没有代码重复,但可读性稍差。使用vector只是为了方便测试

编辑我的回答假设你提前知道数字而不是即时处理它们

vector<int> numbers;
numbers.push_back(1);
numbers.push_back(1);
numbers.push_back(1);
numbers.push_back(2);
numbers.push_back(2);
numbers.push_back(3);
numbers.push_back(3);
numbers.push_back(1);
numbers.push_back(4);
numbers.push_back(4);


for (int i=0; i<numbers.size(); i++)
{
int count = 1;
for (int j=i+1; j<numbers.size() && numbers[i] == numbers[j]; i++, j++)
{
count++;
}
cout << count << " times " << numbers[i] << "." << endl;
}

关于c++ - 如何重构这个简单的代码以避免代码重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6875020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com