有n个人围成一圈,顺序排号,从第一个人开始报数,凡报到3的人退出圈子,问最后留下的是原来第几号的那位?

如题所述

第1个回答  2022-11-16
用数组模拟这n个人,用num来记他们的报数。当num=0时表示数组对应下标的人退出圈子,循环,最后留下来的人的号数就是数组中不为零的下标。\x0d\x0a/*用数组模拟这n个人,用num来记他们的报数*/\x0d\x0a#include \x0d\x0ausing namespace std;\x0d\x0aint func(int n)\x0d\x0a{\x0d\x0aint residue = n;//表示剩余人数\x0d\x0aint num = 0;//用num来模拟报数\x0d\x0aint i = 0;//数组下标\x0d\x0aint re_turn;//保存最后剩下的人的下标\x0d\x0aint *a = new int[n];//new一个n个元素的数组空间\x0d\x0afor (int i = 0; i < n; i++)\x0d\x0a{\x0d\x0aa[i] = 1;//首先初始化数组全为1表示存活\x0d\x0a}\x0d\x0awhile (residue != 1)//当剩余人数还不为1\x0d\x0a{ \x0d\x0aif (a[i] == 1)\x0d\x0a{\x0d\x0anum++;//实现模拟报数\x0d\x0a}\x0d\x0aif (num == 3)//当报到3时\x0d\x0a{\x0d\x0aa[i] = 0;//0表示退出\x0d\x0anum = 0;//num重新置零\x0d\x0aresidue--;//剩余人数-1\x0d\x0a}\x0d\x0ai++;\x0d\x0aif (i == n)//这里实现能够循环报数\x0d\x0a{\x0d\x0ai = 0;\x0d\x0a}\x0d\x0a}\x0d\x0afor (int i = 0; i < n; i++)//这里来确定最后剩下的是谁\x0d\x0a{\x0d\x0acout << a[i] << " ";//这步可以省略。打印出来.........纯属是我想确认下数组中是否只有一个1\x0d\x0aif (a[i] == 1)\x0d\x0a{\x0d\x0are_turn = i;\x0d\x0a}\x0d\x0a}\x0d\x0acout << endl;\x0d\x0adelete [] a;//不要忘记delete掉在堆上new的空间\x0d\x0areturn re_turn + 1;//因为从1开始报数,所以+1\x0d\x0a}\x0d\x0aint main()\x0d\x0a{\x0d\x0aint num = 0;\x0d\x0acout << "input how many people ;";\x0d\x0acin >> num;\x0d\x0acout<<"the last is :"<

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网