《数据结构学习与实验指导》2-2:数组元素循环右移问题

来源:互联网 发布:龙信数据北京有限公司 编辑:程序博客网 时间:2024/06/14 04:33

实验内容:一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>0)个位置。
输入说明:第1行输入N(1<=N<=100)、M(M>=0);第2行输入N个整数。
输出说明:输出循环右移M位以后的整数序列。
测试用例:
输入 | 输出
6 2
1 2 3 4 5 6 | 5 6 1 2 3 4
6 8
1 2 3 4 5 6 | 5 6 1 2 3 4
3 6
11 23 56 | 11 23 56
1 0
8 | 8

#include <stdio.h>#include <stdlib.h>int main(int argc, const char * argv[]) {    int N, M;    scanf("%d %d", &N, &M);    M = M % N;    int *arr = (int *) malloc(N * sizeof(int));    for (int i = 0; i < N; i++) {        scanf("%d", arr + i);    }    if (M != 0) {        for (int i = 0; i < M; i++) {            int t = arr[i];            int index = i;            do {                arr[index] = arr[(index - M + N) % N];                index = (index - M + N) % N;            } while (i != index);            arr[(i + M) % N] = t;        }    }    for (int i = 0; i < N - 1; i++) {        printf("%d ", arr[i]);    }    printf("%d\n", arr[N - 1]);    free(arr);    return 0;}
原创粉丝点击