求大神,纸牌问题C语言实现
有编号从1到N的纸牌,按顺序摞在一起。游戏规则:扔掉第一张并将第二张放到最下面;然后扔掉第三张并将第四张放到最下面;依次循环下去,问最后剩下编号为几的牌号?N是随机输入的数,输出剩余的最后编号。例如:N=3;
最后输出:2
N=6;
最后输出:4
N=10;
最后输出:4
程序代码:/*纸牌问题*/
#include<stdio.h>
#include<stdlib.h>
void init(int *x,int n) //初始化
{
int i;
for(i=0;i<2*n-2;i++)
x[i]=0;
for(i=0;i<n;i++)
x[i]=i+1;
}
int turn(int *x,int n) //模拟游戏过程
{
int i,j=n;
for(i=1;i<2*n-3;i+=2)
x[j++]=x[i];
return x[j-1];
}
int main()
{
int n,*x;
printf("N=");
scanf("%d",&n);
x=(int *)malloc(sizeof(int)*(2*n-2));
init(x,n);
printf("%d\n",turn(x,n));
return 0;
}