本题目要求读入n个整数,要求用最少的比较次数,输出它们的最小值和次小值。例如,对于12 13 1 10 34 1这6个数,最小值为1,次小值
为10。
输入格式:
输入有两行。第一行为整数个数n(≤1 000 000),第二行给出n个以空格分隔的整数。
输出格式:
对每一组输入,在一行中输出最小值和次小值,中间以一个空格分隔,但行尾没有多余空格。如果输入数据不足两个,则输出“Invalid Input”。如果没有次小值,则输出“There is no second smallest element”。
输入样例:
6
12 13 1 10 34 1
输出样例:
1 10
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n;
if(n<=1){cout<<"Invalid Input";return 0;}
int min=INT_MAX,cmin=INT_MAX;
while(n--){
cin>>m;
if(m<min){
cmin=min;
min=m;
}else if(m>min&&m<cmin){
cmin=m;
}
}
if(cmin!=INT_MAX){
cout<<min<<" "<<cmin;
}else{
cout<<"There is no second smallest element";
}
return 0;
}
求最小值和次小值算法
3005

被折叠的 条评论
为什么被折叠?



