A - Buggy Sorting
Time Limit:2000MS Memory Limit:262144KB 64bit
IO Format:%I64d & %I64u
这个题的题意大概就说有人写了一个错误的冒泡排序,问你能否找出一个反例的输入,使得他的结果错误。
我们可以先来看看这个错误的冒泡排序,很容易发现,它每次的起始位置都在前移,也就是说比如一开始一串数字为4 3 2 1,第一次循环的时候起始位置是4,然后3与4进行交换,这串数字变成了3 4 2 1,然后依次交换之后变成了3 2 1 4。然而第二次循环的时候,他的起始位置数字不是3,而是2,那么3就永远不会被替换到了,所以最后结果肯定是错误的,所以可以看出,当我们的数字数量超过3个的时候,我们逆序排列输入,他的程序就会出错。而当只有一个数字和两个数字的时候,他的程序不进行交换,或者仅仅交换一次,那么我们就找不到反例,使得他的程序答案错误了。
所以AC代码如下;
#include<iostream>
using namespace std;
int main()
{
int n;cin>>n;
if(n==1||n==2) cout<<"-1"<<endl;
else{for(int i=n;i>=1;i--) cout<<i<<" ";}
cout<<endl;
return 0;
}