我家丫头的cpp

数组元素循环右移问题

2019-04-12  本文已影响0人  李药师_hablee
#include<stdio.h>
#include<stdlib.h>
#include "shift_heard.h"

#define MAXN 100

int main()
{
    int number[MAXN], N, M;
    int i;
    scanf_s("%d%d", &N, &M);
    for (i = 0; i < N; i++)
    {
        scanf_s("%d", &number[i]);
    }
    M %= N;//当M大于等于N时转化成等价的小于N的数
    for (i = 0; i < M; i++)
    {
        shift(number, N);
    }
    for (i = 0; i < N; i++)
    {
        printf("%d ", number[i]);
    }

    system("pause");
    return 0;
}

shift_heard.h

#ifndef _shift_HEARD
#define _shift_HEARD

void shift(int Array[], int N);

#endif // !_shift_HEARD

shift.cpp

void shift(int Array[], int N)
{
    int i, ArrayEnd;

    ArrayEnd = Array[N - 1];
    for (i = N - 1; i > 0; i--)
    {
        Array[i] = Array[i - 1];
    }
    Array[0] = ArrayEnd;
}

输出

输出.png
#include<stdio.h>
#include<stdlib.h>
#include "shift_heard.h"

#define MAXN 100


int main()
{
    int number[MAXN], N, M;
    int i;
    scanf_s("%d%d", &N, &M);
    for (i = 0; i < N; i++)
    {
        scanf_s("%d", &number[i]);
    }
    M %= N;//当M大于等于N时转化成等价的小于N的数

    shift(number, N, M);

    for (i = 0; i < N; i++)
    {
        printf("%d ", number[i]);
    }

    system("pause");
    return 0;
}

shift.cpp

#define swap(a,b) a^=b,b^=a,a=a^b

void shift(int Array[], int N,int M)
{
    int i, j;

    if (M > 0 && M < N)
    {
        for (i = 0, j = N - 1; i < j; i++, j--)//逆转N个数据
        {
            swap(Array[i], Array[j]);
        }
        for (i = 0, j = M-1; i < j; i++, j--)//逆转前M个数据
        {
            swap(Array[i], Array[j]);
        }
        for (i = M, j = N - 1; i < j; i++, j--)//逆转後N-M个数据
        {
            swap(Array[i], Array[j]);
        }
    }
}

shift_heard.h

#ifndef _shift_HEARD
#define _shift_HEARD

void shift(int Array[], int N,int M);

#endif // !_shift_HEARD

输出

output.PNG
上一篇 下一篇

猜你喜欢

热点阅读