我目前在从数组中获取最大值时遇到问题,这是我的代码:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int a[10],max=0,j,secondbig=0;
for(int i=0;i<10;i++)
{
cin>>a[i];
}
max = a[0];
for(int i=0;i<10;i++)
{
if(a[i]>max){
max=a[i];
j=i;
}
}
secondbig=a[10-j-1];
for(int i=0;i<10;i++)
{
if(secondbig <a[i] && j != i)
secondbig =a[i];
}
cout<<max<<"\n"<<secondbig;
return 0;
}
我想要做的是首先从数组中获取最大值,然后保留一个数组值,然后获得第二大值,第三大值相同,例如:
200
100
50
300
400
500
600
700
800
900
如果上述测试值900是最大值,那么随后的第二和第三大值应该是700和500,那么还有吗?
答案 0 :(得分:0)
也许你可以对数组进行排序
int *pbeg = begin(a);
int *pend = end(a);
sort(pbeg, pend);
这将使用运算符&lt;对[pbeg,pend]范围内的所有元素进行排序, 或使用二元谓词
对所有元素进行排序答案 1 :(得分:0)
鉴于你的原始代码,我认为这是你所尝试的风格。它将回归三个最高的vaule。请注意,您只需要创建一个循环来重复初始计算。您希望最大剩余值小于先前的最大值。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <limits>
using namespace std;
int main()
{
int a[10], max, prior_max = numeric_limits<int>::max();
for(int i=0;i<10;i++)
{
cin>>a[i];
}
for( int j = 0; j<3; j++){
max = numeric_limits<int>::min();
for(int i=0;i<10;i++)
{
if(a[i]>max && a[i]<prior_max){
max=a[i];
}
}
cout << max << endl;
prior_max = max;
}
return 0;
}
答案 2 :(得分:0)
假设您很乐意获得价值,我会使用矢量。
std::sort(std::begin(a), std::end(a), std::greater<int>());
然后打印或复制数组的第一个n
元素(假设n
不超过数组大小10
)。它们将以相反的顺序排列,但可以很容易地纠正。
答案 3 :(得分:0)
根据您的后续问题,如果要列出所有最大值,请将j <3更改为j <10。如果您想要从数组中提取的最大值的数字和,则需要再添加一个变量:
int a[10], total, max, prior_max = numeric_limits<int>::max();
然后在外部循环中,放置在内部循环的末尾这个语句:
total += max;
然后在循环执行完成后,您可以打印出总数或以其他方式使用它。如:
cout << 'Total: ' << total << endl;