概述
!!!所有方法和代码均为复制粘贴,仅作自己整理的题解!!!
题目:https://pintia.cn/problem-sets/17/problems/262
方法一:
直接每次向右移动一个,一共N次, 要移动M位, 就移动M次 共NM次。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int a[n];
for(int i=0;i<n;i++)//输入数组元素
cin>>a[i];
for(int j=0;j<m;j++)
{
int t;
t=a[n-1];//保存最后一位数字
for(int k=n-2;k>=0;k--)//数组中的元素右移一位
{
a[k+1]=a[k];
}
a[0]=t;//把最后一位数字放在第一位
}
for(int ii=0;ii<n;ii++)
{
cout<<a[ii];
if(ii!=n-1)//最后一个数字没有空格
{
printf(" ");
}
}
return 0;
}
方法二:
将数组分成两部分, 设后面M位为数组b, 前面N-M位为数组a, 那么数组的组成就是ab.
原始数组是ab, 我的目的是将这个数组变成ba
第一步:将整个长度为N的数组倒置得到 b-1a-1 .
第二步:将 b-1 数组和 a-1 数组分别倒置, 得到 ba数组.
//该函数实现将两个变量互换
void Swap(int *a, int *b)
{
//得到中间变量
*a = *a ^ *b;
//b变量获取到a的值
*b = *b ^ *a;
//a变量通过中间变量获取到当时b的值
*a = *a ^ *b;
}
void moveRight(int Arr[], int N, int M)
{
int i, j;
//转置所有的元素
for(i=N-1, j=0; j<i; i--, j++)
Swap(&Arr[i], &Arr[j]);
//转置前面M个数据
for(i=M-1, j=0; j<i; i--, j++)
Swap(&Arr[i], &Arr[j]);
//转置后面面N-M个数据
for(i=N-1, j=N-M-1; j<i; i--, j++)
Swap(&Arr[i], &Arr[j]);
}
方法三:控制输出格式
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
m=m%n;//存在m>n的情况,要排除掉 2%5的结果是商0余2
for(int j=n-m;j<=n-1;j++)//先输出第n-m个到最后一个
cout<<a[j]<<" ";
for(int k=0;k<n-m;k++)//再从一个输出到n-m-1个
{
cout<<a[k];
if(k!=n-m-1) printf(" ");
}
return 0;
}
最后
以上就是高挑爆米花为你收集整理的PTA数组元素循环右移的全部内容,希望文章能够帮你解决PTA数组元素循环右移所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复