答案输不出 我也不知道原因
我的程序:
#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次洗牌回到初始状态