2008人站成一排报奇数的出列,其余依次报数,如此反复必剩下一人.编一程序问此人第一次报的是几?

来源:百度知道 编辑:UC知道 时间:2024/07/07 10:04:31
程序必须是用c语言编写的.

/*你是怎么口算的?能共享一下思想么?我这是用程序才算出来的*/

/*2008人站成一排报奇数的出列,其余依次报数,如此反复必剩下一人.编一程序问此人第一次报的是几?*/

#include <stdio.h>

#define MAX 2008

int n = MAX;
int d[MAX];

int pow(int a, int b);

int main(int argc, char *argv[])
{
int i, k = 0;

for (i = 0; i < MAX; i++)/*赋值 */
{
d[i] = i;
}

while (n > 1)
{
for (i = pow(2, k) - 1; i < MAX; i += pow(2, k+1))
{
n--;
d[i] = -1;
}

k++;
}

for (i = 0; i < MAX; i++)
{
if (d[i] != -1)
{
printf("result:%d\t", i+1);
}
}

return 0;
}

int pow(int a, int b)//指数函数
{
int i;
int s = 1;

for (i = 0; i < b; i++)
{
s *= a;
}

return s;
}

#include <stdio.h>
#include <stdlib.h>
int ma