自测-3 数组元素循环右移问题

一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,

如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。

输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4


#include<stdio.h>
int main()
{
    int a,b;
    int i,j;
    int c[999]= {0};
    int flag1=0,flag2=0;
    scanf("%d%d",&a,&b);
    for(i=1; i<=a; i++)
    {
        c[i]=i;

    }
    if(b==0)
    {
        printf("%d",c[1]);
        for(i=2;i<=a;i++)
        {
            printf(" %d",c[i]);
        }
    }
    if(b<=a&&b!=0)
    {

        for(j=a-b+1; j<=a; j++)
        {
            if(flag1==0)
                printf("%d",c[j]);
            else
                printf(" %d",c[j]);
            flag1++;
        }
        for(j=1; j<a-b+1; j++)
        {
            printf(" %d",c[j]);
        }
    }
    else

        if(b>a)
        {


            for(j=a-b%a+1; j<=a; j++)
            {
                if(flag1==0)
                    printf("%d",c[j]);
                else
                    printf(" %d",c[j]);
                flag1++;
            }
            for(j=1; j<a-b%a+1; j++)
            {
                printf(" %d",c[j]);
            }

        }


    return 0;
}

样例都通过,但提交显示错误0

是不是程序的太复杂了?
可以试试:
对于A[i],对应的B的索引为 B[(i + M) % N]

#include <stdio.h>
int main(){
    int N, M;
    scanf("%d%d", &N, &M);
    int A[N], B[N];
    int i;
    
    for (i = 0; i < N; ++i){
        scanf("%d", &A[i]); 
    }
    
    for (i = 0; i < N; ++i){
        B[(i + M) % N] = A[i]; 
    }
    
    for (i = 0; i < N - 1; ++i){
        printf("%d\t", B[i]); 
    }
    printf("%d", B[N - 1]); 
    return 0;
}