(C++)有n个人围成一圈,顺序排号。从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。
#include<iostream>
#include<iomanip>
using namespace std;
int main() {
//num[50]:存储参加游戏的总人数
int i, k, m, n, num[50], * p;
//输入参加游戏的总人数
cout << "input n:" <<endl ;
cin >> n;
//将数组首元素赋给指针
p = num;
//给数组赋值
for ( i = 0; i < n; i++)
{
*(p + i) = 1 + i;
}
i = 0; //用于循环
k = 0; //用来记录报数的数
m = 0; //用来记录淘汰的人数
//如果参加游戏人数没剩下最后一个人就继续报数
while (m<n-1)
{
//报数,每报一次,k加1,数组元素为0的不报数
if (*(p + i) != 0) k++;
//如果报数人数达到3,就将记录报数的k清零,并将报数为3的元素值改为0
if (k==3)
{
*(p + i) = 0;//将报数为3的元素值改为0
k = 0;//将记录报数的k清零
m++;//用来记录淘汰的人数
}
i++;//循环次数
//判断循环是否结束了一轮
if (i==n)
{
i = 0;//重新将循环次数清零,以便下轮游戏
}
}
//查询最终剩下的是哪个
while (*p==0)
{
p++;
}
cout << *p;
return 0;
}
版权声明:本文为weixin_45487120原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。