请问数据移位输出为何不变?

题目描述
将一维数组中的元素循环左移 k 个位置

输入描述
第 1 行是一维数组元素的个数 n (数组大小)

第 2 行是一个整数 k , 表示移动的位置

下面 n 行为数组的元素个数

输出描述
输出 n 行,表示移动后的数字

#include<stdio.h>
#define N 10000
int main ()
{
    int k,a[N],b[N],n,t,w,i;
    scanf("%d",&n);
    scanf("%d",&k);
    {
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    if(i<k)
a[i]=a[i+k];
 if(i==k)
    a[i]=a[i];
if(i>k)
a[i]=a[i-k]; 
    for(i=0;i<n;i++)
printf("%d\n",a[i]);
}
return 0;

#include<stdio.h>
#define N 10000
int main()
{
    int k,a[N],b[N],n,t,w,i;
    scanf("%d",&n);
    scanf("%d",&k);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for (i = 0; i < k % n; i++)
        b[i] = a[i];
    for (i = 0; i < n; i++)
    {
        if (i < n - k % n)
            a[i] = a[i + k % n];
        else
            a[i] = b[i - n + k % n];
    }
    for(i=0;i<n;i++)
        printf("%d\n",a[i]);
    return 0;
}
#include<stdio.h>
#define N 10000

int main()
{
    int k, a[N], n, i, j, t, x;
    scanf("%d", &n);
    scanf("%d", &k);
    {
        for (i = 0; i < n; i++)
            scanf("%d", &a[i]);
        t = a[0];
        for (i = 0, j = k, x = 0; x < n - 1; x++) {
            a[i] = a[j];
            i = j;
            if (j + k < n)
                j += k;
            else
                j = j + k - n;
        }
        a[i] = t;
        for (i = 0; i < n; i++)
            printf("%d\n", a[i]);
    }
    return 0;
}