• 算法与数据结构实验题 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;
    }
  • 相关阅读:
    os模块
    random模块
    datetime模块
    time模块
    软甲开发目录规范
    模块与包
    函数递归
    内置函数
    【NOIP2016提高组】换教室
    【NOIP2015提高组】运输计划
  • 原文地址:https://www.cnblogs.com/laixiaolian/p/5917078.html
Copyright © 2020-2023  润新知