gpt4 book ai didi

c++ - 列表中的最大数字

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:25 25 4
gpt4 key购买 nike

第一行有两个值 N 和 K。N 是第一行之后的输入数,K 是正在寻找的最大数字的数量。

示例输入:

5 2

6

7

17

11

6

(5 行输入,正在寻找 2 个最大值)

示例输出:

17

11

出于某种原因,我只得到第一个输出而没有得到第二个输出。

vector<long> vectorAddCheck(vector<long> x, long value){
if(x.empty()){
x.push_back(value);
}
else {
for(int i = 0; i < x.size(); i++){
if(x[i] < value){
x[i] = value;
}
}
}
return x;
}


int main() {
long numLines, numOutputs, temp;
vector<long> outputList = {};
cin >> numLines >> numOutputs;

for(int i = 0; i < numLines; ++i){
cin >> temp;
outputList = vectorAddCheck(outputList, temp);
}

for(int i = 0; i < outputList.size(); i++){
cout << outputList[i] << endl;;
}
return 0;
}

最佳答案

由于 vectorAddCheck 的实现,您的输出 vector 仅包含一个数字。如果 vector 为空,则添加一个项目,否则替换它或跳过新项目。所以你的 vector 将始终包含一个对象。

您可以通过将方法更改为以下实现来修复它:

vector<long> vectorAddCheck(vector<long> x, long value){
if(x.size() < 2){
x.push_back(value);
}
else {
unsigned min = (x[0] < x[1]) ? 0 : 1;
if (x[min] < value){
x[min] = value;
}
}
return x;
}

不过,更简洁的实现是可能的:

int main() {
long numLines, numOutputs, temp;
cin >> numLines >> numOutputs;

set<long> numbers;
for(int i = 0; i < numLines; ++i){
cin >> temp;
numbers.insert(temp);
}


for (set<long>::reverse_iterator it = numbers.rbegin(); it != numbers.rend(); ++it)
{
cout << *it << endl;

--numOutputs;
if (numOutputs == 0) {
break;
}
}

return 0;
}

关于c++ - 列表中的最大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46455881/

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