求大神,纸牌问题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; }