PTA数据结构 7-1 求最小值和次小值 (25分) 本题目要求读入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
正确代码如下:
#include<iostream> #include<algorithm> using namespace std; int main(){ ios::sync_with_stdio(false); int n; cin>>n; if(n<2){ cout<<"Invalid Input"<<endl; return 0; } int a[n]; for(int i=0;i<n;i++){ cin>>a[i]; } sort(a,a+n); int min=a[0]; int nmin,sign=0; for(int i=0;i<n;i++){ if(a[i]>min){ nmin=a[i]; sign=1; break; } } if(sign==0) cout<<"There is no second smallest element"<<endl; else cout<<min<<" "<<nmin<<endl; return 0; }本题要求比较然后求出他的最小值和次最小值,在数据课本中我们了解到了求他的最大值和次最大值;但是在测试程序时,有测试点未过。 原来的思路是遍历,然后依次的比较,但是那样不对。 换一种思路,我们可以将数组先进行排序,然后输出最小值和次最小值; 要想把数组排序,我们可以用到C++中的sort函数。 sort函数: I)Sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可! II)Sort函数有三个参数: (1)第一个是要排序的数组的起始地址。 (2)第二个是结束的地址(最后一位要排序的地址) (3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。 Sort函数使用模板: Sort(start,end,排序方法) (1)sort函数没有使用第三个参数,默认升序,实现的是从小到大。 (2)从大到小 需要加入一个比较函数 complare(),此函数的实现过程是这样的 bool complare(int a,int b) { return a>b; } std::ios::sync_with_stdio(false) std::ios::sync_with_stdio(false) 的作用是baidu取消缓冲区同步,因为printf()/scanf()是C函数zhi,而cin/cout是C++函数,这些函数需要用到各自的缓冲区,为了防dao止各自的缓冲区错位,C++默认将C函数和C++函数的缓冲区同步。当你设置成std::ios::sync_with_stdio(false)后C++就会取消同步,这会提高cin/cout的运行速度,代价是不能和printf()/scanf()混用,否则会因不同步而出现问题,所以在这种情况下整个程序切记不可将cin/cout和printf()/scanf()混用 其可以大幅提高大数据的输入和输出以节省时间 定义了一个sign来判断最小值和次最小值是否相等