

题目
解决代码及点评
/*
16.有17个人围成一圈(编号为0~16),从第 0号的人开始从 1报数,
凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。
问此人原来的位置是多少号?
*/
#include <stdio.h>
#include <stdlib.h>
void main()
{
int total = 17,need = 17,k = 3;
int index = 0,count = 0,i = 0;
int a[100] = {0};
for (;;)
{
index = index % total + 1; // 取得第一个index
if(a[index] == 0) // 如果上面有人
{
i = (i + 1) % k; // 找到报数3的人
if(i == 0)
{
count++; // 退出
a[index] = 1;
}
}
if(count == need) break; // 退出的人够多时,整个循环退出
}
printf("index = %d\n",index);
system("pause");
}
代码编译以及运行
由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:
1)新建工程
2)选择工程
3)创建完工程如下图:
4)增加文件,右键点击项目
5)在弹出菜单里做以下选择
6)添加文件
7)拷贝代码与运行
程序运行结果