算法与数据结构实验题 4.3 不知道取什么好

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;
}
posted @ 2016-09-28 16:59  laixl  阅读(343)  评论(13编辑  收藏  举报