题目描述
牛牛刚学完排序,他准备拿n个数一展身手,但是他发现现实中的排序与课堂里的排序不一样
每次他只能对连续的n-1个数进行从小到大的排序
请问牛牛最少需要几次排序能将所有的数排成有序的
输入描述:
第一行先输入一个整数n (3 ≤ ≤ 50)
第二行输入n个整数范围在1到1000以内
输出描述:
输出一个整数
题目分析:
这道题只要考虑到几个方面,还是很简单的,首先进行判断,这些数是不是已经排列好的,如果排列好了就不用在进行排序了,输出0就好了,如果最大值在最大值的位置,或者最小值在最小值的位置(但两者不能同时成立)就输出1,如果最大值在最小值的位置,最小值在最大值的位置(两者同时成立)则输出3,剩下的输出2就好了。 自我感觉如果好好分析的话还是比较简单的。
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
int main ()
{
int a[1005];
int n;
cin >> n;
for (int i=1;i<=n;i++)
{
cin >> a[i];
}
int best=0,bad=1000;
for (int i=1;i<=n;i++)
{
best=max(best,a[i]);
bad=min(bad,a[i]);
}
bool s=true;
for (int i=1;i<n;i++)
{
if(a[i]>a[i+1]) s=false;
}
if(s)
{
cout << "0" << endl;
return 0;
}
if(best == a[n]||bad == a[1]) cout << "1" << endl;
else if(best == a[1]&&bad == a[n])cout << "3" << endl;
else cout << "2" << endl;
return 0;
}


京公网安备 11010502036488号