有关数组和指针不同解题法

2017-11-29  本文已影响0人  青辰m

题目

数组法

#include<stdio.h>
#define  z 100
int main()
{
    int a[z];
    int b[z];
    int i,m,n;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    scanf("%d",&m);
 
    for(i=0;i<m;i++)//用另一个数组先将原数组中要向前移动的m个数字装起来。
    {
        b[i]=a[n-m+i];
    }
    for(i=n-1;i>=m;i--)//从后向前装入数组中
    {
        a[i]=a[i-m];
    }
    for(i=0;i<m;i++)
    {
        a[i]=b[i];
    }
    for(i=0;i<n;i++)//遍历输出。
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
}

相当于拿出要移动的,在原数组中的前面留出空位

指针法

#include<stdio.h>
move(int *a,int *b,int m,int n)
{
    int i;
    for(i=0;i<n;i++)
        *(b+(i+m)%n)=*(a+i);//a,b 分别代表a,b数组的首地址,
}
int main()
{
    int i,a[10000],b[10000],n,m;//数组一定要初始化
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    move (&a,&b,m,n);
    for(i=0;i<n;i++)//遍历数组b[]
        printf("%d ",b[i]);
    return 0;

}

(b+(i+m)%n)=(a+i);

上一篇 下一篇

猜你喜欢

热点阅读