我先来介绍一下 “C语言围圈报数题目代码实现” 是什么:
这是一道经典的数学题目,题目有三个人围成一圈,他们报数,规定报到第三个人的时候要翻过去,也就是从头开始,如此循环,直到只剩下最后一个人。现在我们需要用C语言实现这个过程。
下面是该算法的完整实现,以及代码解析:
思路分析
1.将所有人简化为一个数组,数组的下标表示的是人的编号。
2.从第k个人开始循环报数,每报到第m个人时,这个人就要被淘汰,他的位置为0。
3.继续从下一个人开始报数。
4.最后只有一个人留下时,他就是胜者。
代码实现
#include <stdio.h>
#define N 10 //定义有多少个人
int a[N + 1];
int main()
{
int k, m, i, n;
printf("请输入k和m的值: ");
scanf("%d%d", &k, &m);
//依次从n=1开始,淘汰到只剩下一个人
for (n = N; n >= 1; n--)
{
//重设报数起始点和报数个数
i = k;
while (1)
{
while (a[i] == 0)
{
i++;
if (i > N)
i = 1;
}
m--;
if (m == 0)
{
a[i] = 0;
printf("%d ", i);
break;
}
i++;
if (i > N)
i = 1;
}
}
//输出胜出者的编号
printf("\n胜出者的编号为: ");
for (i = 1; i <= N; i++)
{
if (a[i] != 0)
printf("%d ", i);
}
return 0;
}
代码中用数组a[N+1]存放所有人的状态,为0表示已被淘汰,不为0表示还在游戏中。
代码中用循环来依次淘汰所有人,并将最后胜出的人的编号输出。
示例说明
假设有三个人围成一圈,起始编号分别为1,2,3,则输入k=1,m=3,即第一个人从1开始报数,每报到3就淘汰。
执行结果:
请输入k和m的值: 1 3
3 1
胜出者的编号为: 2
最终胜出者的编号为2。
再假设有五个人围成一圈,起始编号分别为1,2,3,4,5,则输入k=1,m=2,即第一个人从1开始报数,每报到2就淘汰。
执行结果:
请输入k和m的值: 1 2
2 4 1 5
胜出者的编号为: 3
最终胜出者的编号为3。
以上就是完整的 “C语言围圈报数题目代码实现” 的攻略,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言围圈报数题目代码实现 - Python技术站