河南萌新联赛2024第(一)场:河南农业大学--补题

本章将先对本次比赛三道比较简单的题进行整理--a,h,i;

A--造数

解析

对于三个操作。操作2可直接放大倍数使操作简化,所以我们可以直接判断n的奇偶性

逆向思维:

n为偶数,优先进行操作2除以2;

n为奇数,考虑操作1,2,即-1,-2,使n变为偶数;

重复上述操作直到n变为0。

#include<iostream>
#define int long long //注意n的范围
using namespace std;
int n,sum=0;
signed main()
{
    cin>>n;
    if(n==2)
    {
        cout<<1<<endl;
        return 0;
    }
    while(n>=1)
    {
        if(n==2)
        {
            sum++;
            break;
        }
        if(n%2==0)
        {
            n/=2;
            sum++;
        }
        else
        {
            n-=1;
            sum++;
        }
    }
    cout<<sum<<endl;
    return 0;
    
}

H--两难抉择

解析

要求操作后最大数组总和,我们就能想到直接对该数组中最大的数值进行操作。

对于两操作相比,只有当数值为1时,相加比相乘的结果大,我们只需判断最大数值是否为1即可

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	long long int a[n];	
	long long int ans=0;
	int indx=0;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		if(a[i]>a[indx])
		indx=i;
	}
	  for(int i=0;i<n;i++)
	  {
	  	if(i==indx)	
		  {
		  	if(a[i]!=1)a[i]*=n;
		  	else a[i]+=n;
		  }
	  	ans+=a[i];
	  }
	  cout<<ans<<endl;
	 
}

I--除法移位

解析

要使结果为最大值,那第一个数越大越好,所以该题寻找最大值即可:

1.当所给步数充足时,数组最大值从后往前数的位置便是所需值。

2.数组a[0],位置为最大值,那么不需要移动

3.若所给步数不足让数组最大值移动,那么从后往前遍历,到所给步数为止,当前最大值的位置,便是所求值。

#include<iostream>
#include<stack>
using namespace std;
#define  int long long 
signed main()
{
    int n,sop;
    cin>>n>>sop;
    int a[n],b;    
    int max1=0, indx=0,max2=0;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        if(a[i]>=max1) 
        {indx=i;max1=a[i];}
   }//输入数组,找到最大值的下标
    if(a[0]==max1) cout<<0<<endl;
    else if((n-indx)<=sop) cout<<(n-indx)<<endl;//如果所给步数充足,直接输出
    else
    {
        int i,j;
        for( i=n-1,j=1;j<=sop;i--,j++)
        {
            if(max2<a[i])    
            {b=j;
             max2=a[i];//找到在有限步数内,从后往前的当前最大值位置。
          }
        }
       cout<<b<<endl;
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值