如果我输入例如5 4 3 2 1它给出1和2这是正确的但是如果我输入1 2 3 4 5它给出1和5这是错误的......如何解决这个问题?
该程序通过输入找到最小和最小的元素。
#include<iostream>
/*This program finds the smallest and second smallest elements through input*/
using namespace std;
/*This program finds the smallest and second smallest elements through input*/
int main(){
float input_from_user=0.0, largest=0.0, smallest_num=0.0, runners_up=0.0;
int count, i;
cout<<"how many swimming records?"<<endl;
cin>>count;
cout<<"enter time: ";
cin>>input_from_user;
smallest_num=input_from_user;
largest=input_from_user;
for (i=1;i<=count;i++){
cout<<"enter time: "<<endl;
cin>>input_from_user;
/*Compare smallest number with latest input*/
if (smallest_num>input_from_user){
runners_up=smallest_num;
smallest_num=input_from_user;
}
}
cout<<"First:"<<smallest_num<<endl;
cout<<"Runners up: "<<runners_up<<endl;
return 0;
}
答案 0 :(得分:2)
/*Compare smallest number with latest input*/
if (smallest_num>input_from_user){
runners_up=smallest_num;
smallest_num=input_from_user;
}
上面的代码看起来像是问题。
如果input_from_user大于最小数量但小于 runner_up,则应更新runner_up。
/*Compare smallest number with latest input*/
if (runner_up > input_from_user){
if(smallest_num > input_from_user) {
runners_up=smallest_num;
smallest_num=input_from_user;
} else runners_up=input_from_user;
}
答案 1 :(得分:0)
最简单的方法是执行以下操作:
vector<float> tms;
for (i=1;i<=count;i++){
cout<<"enter time: "<<endl;
cin>>input_from_user;
tms.push_back(input_from_user);
}
sort(tms.begin(), tms.end());
cout<<"First:"<< tms[0] <<endl;
cout<<"Runners up: "<< tms[1] <<endl;
此代码在访问元素之前只缺少一些长度检查。
这不是最佳的,因为它对所有元素进行排序,因此有另一种方法而不是排序 - 使用额外的&#34; set&#34;只排序那些有可能在最坏的情况下排在第二小的元素。在最好的情况下,它只需要前两个而不执行任何其他操作,在最坏的情况下,它将像以前一样对所有元素进行排序。
set<float> out;
out.insert(v[0]);
out.insert(v[1]);
for (auto x = v.begin() + 2; x != v.end(); ++x)
{
auto second = ++out.begin();
if ( *x < *second )
out.insert(*x);
}
auto p = out.begin();
cout << "Smallest: " << *p;
++p;
cout << " Second: " << *p << endl;
您可以随时正确定义算法&#34;,但上述方法可以更快地开发和调试代码。