C语言--数组循环右移

该文章描述了一次编程练习,涉及将数组按照特定步长旋转的问题。作者首先分享了自己尝试解决问题的过程,包括遇到的错误,如未考虑m大于n的情况,以及如何修正这些问题。最终,作者通过使用双变量方法解决了数组元素循环旋转的难题。
摘要由CSDN通过智能技术生成

指针变量作为函数形参练习PTA6-6

 

方法一:太麻烦了,但是是自己想出来的!每天进步一点点:)

 

 👆自认为写了一个很完美的版本 但提交出来结果是这样的

 omg /(ㄒoㄒ)/~~  没有考虑到m比n大的情况!!!

然后自己用数字列举发现是有规律的 每m个数字是一个循环,3个数时1和4是一样的,所以加了一个

 

最后无论怎么改,输入不同的数据时会出现前几个数字变成0的情况

就是第一步赋值到数组s里面有错误,会发现n-m-i有时是-1有时候是0

!!!因为要求数组a里是递减,而数组s里要递增然后突然想到了双变量的方法!!!

这样就对啦! 完整代码👇

#include <stdio.h>
#define MAXN 10

void 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;
}

void ArrayShift( int a[], int n, int m )
{
	
	int s[MAXN]={0};
	if(n<m){
		m=m%n;
	}
		for(int i=n-1,j=0;i>=n-m,j<m;i--,j++){
		s[j]=a[i];
	}
	
	for(int i=0;i<m/2;i++){
		int t=s[i];
		s[i]=s[m-i-1];
		s[m-1-i]=t;
	}

	for(int i=0;i<n-m;i++){
		 s[m+i]=a[i];
	}
	
	for(int i=0;i<n;i++){
		a[i]=s[i];
	}
}

方法二:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值