函数fun的功能是:将一副扑克牌编号为1,2,3,...,53,54,以某种特定的方式洗牌,这种方式是将
这副牌分成两半,然后将它们交叉,并始终保持编号为1的牌在最上方,譬如第一次这样洗牌后的
结果为:1,28,2,29,...,53,27,54。两次洗牌后的结果为:1,41,28,15,2,42,...,53,40,27,14,54。
程序的功能是:输出经过n次这样洗牌后的结果。
请在程序的下画线处填入正确的内容,并把下画线删除,使程序得出正确的结果。
*/ #include<stdio.h>
void fun(int a[55],int n)
{
int i,k;
/********found********/
int ___(1)___[55];
for(i=0;i<n;i++)
{
for(k=1;k<=27;k++)
{
b[2*k-1]=a[k];
/********found********/
b[___(2)___*k]=a[k+27];
}
for(k=1;k<=54;k++)
/********found********/
a[k]=___(3)___;
}
}
main()
{
int m,a[55],i;
for(i=1;i<55;i++)
a[i]=i;
printf("请输入洗牌的次数: ");
scanf("%d",&m);
fun(a,m);
for(i=1;i<55;i++)
printf("%d ",a[i]);
printf("\n");
}
答案:
#include<stdio.h>
void fun(int a[55],int n)
{
int i,k;
/********found********/
int b[55];
for(i=0;i<n;i++)
{
for(k=1;k<=27;k++)
{
b[2*k-1]=a[k];
/********found********/
b[2*k]=a[k+27];
}
for(k=1;k<=54;k++)
/********found********/
a[k]=b[k];
}
}
main()
{
int m,a[55],i;
for(i=1;i<55;i++)
a[i]=i;
printf("请输入洗牌的次数: ");
scanf("%d",&m);
fun(a,m);
for(i=1;i<55;i++)
printf("%d ",a[i]);
printf("\n");
}