《一》问题描述:
有17个人围成一圈(编号为0~16),从第 0号的人开始从 1报数,
凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。
问此人原来的位置是多少号?
《二》问题解决:
1.定义数组记录每个编号的状态(是否被淘汰);
2.在未被淘汰的人中检查是否数到3,若是,淘汰此人;
3.继续此过程至所有人被淘汰;
《三》示例代码:
1 /* 2 16.有17个人围成一圈(编号为0~16),从第 0号的人开始从 1报数, 3 凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。 4 问此人原来的位置是多少号? 5 */ 6 7 #define _CRT_SECURE_NO_WARNINGS 8 #include <stdio.h> 9 #include <stdlib.h> 10 11 void main() 12 { 13 int total = 17, need = 17, k = 3; 14 int index = 0, count = 0, i = 0; 15 int a[100] = { 0 }; 16 for (;;) 17 { 18 index = index % total + 1; 19 if (a[index] == 0) 20 { 21 i = (i + 1) % k; 22 if (i == 0) 23 { 24 count++; 25 a[index] = 1; 26 } 27 } 28 if (count == need) break; 29 } 30 printf("index = %d\n", index); 31 system("pause"); 32 }
时间: 2024-11-08 20:08:49