PAT1008乙

PTA乙级1008(数组元素循环右移)

在这里插入图片描述

  • 首先刚看到这个题我想到的位置之间的关系(i+M)%n,然后我就直接将a[(i+M)%n]=a[i];这样就会出现数字覆盖的问题;然后我就想如何去解决,结果大脑就陷入死机状态,其实完全可以直接输出a[(i+M)%n](扎心)
  • 方法一:可以直接输出,但要注意空格的问题(代码如下)

···

	 #include<iostream>
	#include<bits/stdc++.h>
	using namespace std;
	int main()
	{
		freopen("in.txt","r",stdin);
		int n,M; cin>>n>>M;
		int a[n+1];
		M=M%n;
		for(int i=0;i<n;i++) cin>>a[i];
		for(int i=n-M;i<n;i++)
		{
	       cout<<a[i];
	       if(M!=n && i!=n )cout<<" " ;
	       if(M==n && i!=(n-1)) cout<<" ";
		}
		for(int i=0;i<n-M;i++)
		{
	     	
 	cout<<a[i];
 	if(M!=0 && i!=(n-M-1)) cout<<" ";
 	if(M==0 && i!=(n-M-1))  cout<<" ";
    	} 
}

···

一开始我忽略了M可以大于N的问题(只有14分,嘤嘤嘤),然后就有了开始的M=M%n(棒棒哒)

  • 方法二: 只需将原数组反转,然后在进行M反转,n-M反转
int main()
{
	freopen("in.txt","r",stdin);
	int n,M; cin>>n>>M;
	int a[n+1];
	M=M%n;
	for(int i=0;i<n;i++) cin>>a[i];
	reverse(a,a+n);
    reverse(a,a+M);
    reverse(a+M,a+n);
    for(int i=0;i<n;i++)
    {
    	cout<<a[i];
    	if(i!=n-1) cout<<" ";
    }
    
}

注意:reverse()反转左闭右开的区间,元素的起始位置和终止位置;同样要考虑M>n的问题;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shan_shmily

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值