PTA中数组循环右移的问题

欠债的脱水橘猫 2019-12-17 11:18:13
大佬我用了两种方式写出来的都是错的,无法理解它的错误提示如下

数组循环右移 (20分)

本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a​0​​a​1​​⋯a​n−1​​)变换为(a​n−m​​⋯a​n−1​​a​0​​a​1​​⋯a​n−m−1​​)(最后m个数循环移至最前面的m个位置)。
函数接口定义:

int ArrayShift( int a[], int n, int m );

其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。
裁判测试程序样例:

#include <stdio.h>
#define MAXN 10

int ArrayShift( int a[], int n, int m );

int main()
{
int a[MAXN], n, m;
int i;

scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);

ArrayShift(a, n, m);

for ( i = 0; i < n; i++ ) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
printf("\n");

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

6 2
1 2 3 4 5 6
输出样例:

5 6 1 2 3 4

我用了两种方法都是错的,请指教,第一种方法
int ArrayShift( int a[], int n, int m ){
int i;
if(m>n){
m=m%n;
}
for(int i=n+m,j=0;j<=n;j++)
{
a[i-j]=a[n-j];
}
for(int i=1;i<=m;i++){
a[i]=a[n+i];
}
return a;
}

第二种方法
int ArrayShift( int a[], int n, int m ){
int i,tmp,mid,t;
for(i=0;i<n;i++){
if(m>n){
if(m%n==0);
else {
t=(i+m)%n;
tmp=a[t];
a[t]=a[i];
a[i]=tmp;
}

}
else{
if(i<n-m){
tmp=a[i+m];
a[i+m]=a[i];
a[i]=tmp;
}
else {
mid=a[i+m-n];
a[i+m-n]=a[i];
a[i]=mid;
}
}
return a;
}
}


...全文
395 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 9 楼 SuperDay的回复:
楼主学编程很积极,这一点值得肯定!但还是不够用心,所以进展有点慢
我也觉得,大佬真是火眼金睛!俺会变的
铖邑 2019-12-18
  • 打赏
  • 举报
回复
楼主学编程很积极,这一点值得肯定!但还是不够用心,所以进展有点慢
  • 打赏
  • 举报
回复
引用 5 楼 真相重于对错的回复:
右移几位就是加几求余
谢谢大哥,俺知道了,可惜俺老早就结贴了,没得分给你了
  • 打赏
  • 举报
回复
引用 3 楼 遇见女神的回复:
不需要想那么复杂,跟swap一个道理的,左右都可以循环移动。
谢谢大哥哦,一生平安
  • 打赏
  • 举报
回复
谢谢大哥,俺知道了,可惜俺老早就结贴了,没得分给你了
  • 打赏
  • 举报
回复
引用 1 楼 SuperDay 的回复:
又见楼主,第一种方法,m+n必然越界,并且不用交换变量,会覆盖原来的值
第二种逻辑太乱了
OMG,大佬我真的是佩服的五体投地,果然是我太嫩了,阿里嘎多,好人一生平安
铖邑 2019-12-17
  • 打赏
  • 举报
回复
又见楼主,第一种方法,m+n必然越界,并且不用交换变量,会覆盖原来的值 第二种逻辑太乱了
真相重于对错 2019-12-17
  • 打赏
  • 举报
回复
右移几位就是加几求余
真相重于对错 2019-12-17
  • 打赏
  • 举报
回复
右移几位就是加几求余
遇见女神 2019-12-17
  • 打赏
  • 举报
回复
不需要想那么复杂,跟swap一个道理的,左右都可以循环移动。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧