題目描述:
Description
hcbbt巨巨,正宗GFS,深受萬千學妹的愛慕,人們爲了得到他的一張照片日思夜想,也沒有個結果.如今,巨巨爲了幫助無奈的霞姐,做出巨大犧牲.他出了一道思考題,凡是能夠解出來的,可以獲得巨巨的照片.
題意如下:有n個人,巨巨對這些人的身高進行編號,最 矮的爲1,以此類推,最高的爲n,我們保證每個人的身高都不一樣,所以每個人的編號都是不一樣的.現在打亂這n個人的順序,問最少的移動次數使其編號從小 到大排序,移動的規則限定如下:每次只能把其中一個人放在第一個人的最前面,這樣算一次操作.
Input
包含T組數據。每組數據第一行爲一個整數n,代表有n個人
Output
每組數據輸出一行,表示最小的移動次數使得序列從小到大排列。
Sample Input
2
4
1 2 3 4
4
1 3 2 4
Sample Output
0
2
解題思路:在整個數組中尋找數組中最大的數,s=1;在最大的數之前尋找整個數組裏次大的數。如果不存在,結果爲數組長度(n)-s,退出尋找;如果存在則s++,尋找次大數之前是否有第三大的數。以此類推。
代碼如下:
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int cmp(int a,int b)
{
return a<b;
}
int main()
{
int num,n;
int a[6000],b[6000];
cin>>num;
while(num--)
{
int m=0,s=1; //m記錄最大數位置 s記錄不需要移動的次數
cin>>n;
a[0]=0;
for(int i=1; i<=n; i++)
{
cin>>a[i];
b[i]=a[i];
if(a[m]<a[i])
m=i;
}
sort(b+1,b+n,cmp);
for(int i=m-1,j=n-1;i>0;i--)
{
if(a[i]==b[j])
{
j--;
s++;
}
}
cout<<n-s<<endl;
}
return 0;
}