求解答错误原因

答案输不出 我也不知道原因 图片图片

我的程序:
#include
#include
void sort(int a[500], int b[500],int n)//换一次
{

int i, j = 0, flag = 1;
for (i = 0; i < n; i++)
{

if (i % 2 == 0)

{ b[j++] = a[n / 2 + i/2]; }

else

{ b[j++] = a[i/2]; }

}
}
void change(int a[500], int b[500],int n)
{
int i; for (i = 0; i < n; i++)
{ a[i] = b[i]; b[i] = 0; }
}
int main()
{

int i, n,a[500],b[500],flag=1,c=0;

scanf("%d", &n);
for (i = 0; i < 2 * n; i++)
{ a[i] = i + 1; b[i] = 0; }

flag = 1;
while(flag==1)
{ sort(a, b, 2 * n);

flag = 0; c++;

for (i = 0; i < 2 * n; i++) //若两个数组都不相同 那么flag=1 继续循环

{ if (a[i] != b[i])

{ flag = 1;

change(a, b, 2 * n);

}

}
}

printf("经%d次洗牌回到初始位置\n", c);
return 0;}

啊啊啊 竟然图片都看不清
那就只能在评论里看了
题目描述
    给你2n张牌,编号为1,2,3,...,n,n+1,...,2n,这也是最初的牌的顺序。一次洗牌是把序列变为 n+1,  1,  n+2,  2,  n+3,  3,  n+4,  4, ...,  2n,  n。可以证明,对于任意正整数n,都可以在经过m次这样的洗牌后,这幅牌重新回到初始的顺序。
    
    编程对于2n(n从键盘输入)张牌进行洗牌,求出重新得到初始顺序的洗牌次数m的值。

输入
输入正整数n,即2n张牌。

输出
输出洗牌次数m的值。

样例输入
50
样例输出
经100次洗牌回到初始状态