1、题目:
2、代码:
#include<iostream>
#include<algorithm>
using namespace std;
//以这组数据为例说明:10 2
//1 4 7 4 9 6 5 9 8 4
int main()
{
int n,m;
cin>>n>>m;
m=m-1;
int i,j=0;
int a[1001],b[1001],c[1001];
for(i=0; i<n; i++)
{
cin>>a[i];
b[i]=a[i];
c[i]=a[i];
}
sort(b,b+n);//找出最大值
int count;
//找到第一个最大值所在位置
for(i=0; i<n; i++)
{
if(a[i]==b[n-1])
{
count=i;
break;
}
}
//对数组a进行第一次重新排列,变成 9 6 5 9 8 4 1 4 7 4
int num=count;
for(i=0; i<n; i++)
{
if(i<n-num)
{
a[i]=c[count];
count++;
}
else
{
a[i]=c[j];
j++;
}
}
int k;
if(m<num)
{
k=n-num+m;//此时我们原来的第二个数据变成了现在数组中的a[7];
}
else
{
k=m-num;
}
int count1=0,count2=0,count3;
//重新排列之后,计算在所要输出的数字前后比它大的数有多少
for(i=0; i<k; i++)
{
if(a[i]>=a[k])
{
count1++;//在要求输出的数之前的与之相等的数一定比它先输出
}
}
for(i=k+1; i<n; i++)
{
if(a[i]>a[k])
{
count2++;//比它大的数一定先输出
}
if(a[i]==a[k])
{
count3++;
}
}
//如果在要求输出的数之前比它大的数的个数大于之后的个数时,
//之后序列里的与之相等的数一定不会输出,反之则一定输出
//比如,若要求输出7后面的4,则8后面的4一定先比7后的4先输出
if(count1<=count2)
{
cout<<count1+count2+count3+1<<endl;
}
else
{
cout<<count1+count2+1<<endl;
}
return 0;
}