指针变量作为函数形参练习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];
}
}
方法二: