解题思路:
思路一:再建一个数组b,使b接收a变化后的值,再将b的值赋给a
,最后输出a,此种思路易于理解,但代码稍微繁琐
分三种情况:
1.当m%n==0时,b[i]=a[i];
2.当m>n时,b[i]=a[(n+i-m%n)%n];
3.当m<n时,b[i]=a[(n+i-m)%n];
思路二:直接令m=m%n;第一步输出n-m到n-1的内容,第二步输出
0到n-m-1的内容,注意一下空格就可以
#include <stdio.h>
int main()
{
int n,m,c=0;
scanf("%d %d",&n,&m);
int a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
m=m%n;
for(int i=n-m;i<n;i++)
{
printf("%d",a[i]);
c++;
if(c<n)
printf(" ");
}
for(int i=0;i<n-m;i++)
{
printf("%d",a[i]);
c++;
if(c<n)
printf(" ");
}
return 0;
}

该博客主要介绍了如何用C++编程解决数组元素循环右移的问题。作者提供了两种思路,一种是通过创建新数组实现,另一种是直接操作原数组。在第二种思路中,先输出数组的n-m个末尾元素,再输出剩余的前n-m个元素,从而实现循环右移的效果。代码简洁且易于理解,适合初学者学习。
434

被折叠的 条评论
为什么被折叠?



