求大神,纸牌问题C语言实现
有编号从1到N的纸牌,按顺序摞在一起。游戏规则:扔掉第一张并将第二张放到最下面;然后扔掉第三张并将第四张放到最下面;依次循环下去,问最后剩下编号为几的牌号?N是随机输入的数,输出剩余的最后编号。例如:N=3;
最后输出:2
N=6;
最后输出:4
N=10;
最后输出:4
2013-06-03 18:29
2013-06-03 18:51
2013-06-03 19:09
程序代码:/*纸牌问题*/
#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;
}
2013-06-03 19:15
2013-06-03 19:17
2013-06-03 19:22
2013-06-03 19:37
程序代码:#include <stdio.h>
int main()
{
int tmp, n;
int flag = 0, a1 = 1, d = 1;
scanf("%d", &n);
while (n > 1)
{
tmp = n;
if (flag) n -= n / 2;
else a1 += d, n /= 2;
if (tmp % 2) flag = !flag;
d *= 2;
}
printf("%d\n", a1);
return 0;
}

2013-06-04 00:31
2013-06-04 16:49
2013-06-05 17:16