时间限制: 1000 ms 内存限制: 65536 KB
提交数: 18417 通过数: 9605 【题目描述】
N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;…输出依次出圈的人的编号。
【输入】输入N和M。
【输出】输出一行,依次出圈的人的编号。
【输入样例】8 5【输出样例】
5 2 8 7 1 4 6 3【提示】
【数据范围】
对于所有数据,2≤N,M≤1000。
二、思路1.用while循环限制循环次数,每出圈一个人,人数减一,直到人数为零时循环结束。
2.定义一个数组全部置为0当做标记,当出圈时置为1。用数组的下标计数,每数到m则为出圈。每当数完一圈把数组下标再置1形成一个循环。
三、代码
#include
using namespace std;
int main()
{
int n,m; //n为人数 m为数到出圈的数
int i=0,t=0; //i为数组的下标 t做计数用与m比较决定什么时候出圈
int a[1001]={0}; //定义一个全为零的数组
cin>>n>>m;
int c=n; //c当计数用 记录还剩几个没出圈
while(c>0)
{
i++;
if(i>n) i=1; //当数组下标大于最大值时 再置为1 从头再开始数
if(a[i]==0)
{
t++; //当遇到没有出圈的人t++
if(t==m) //当符合出圈条件时
{
a[i]=1; //下标置1 表示已经出圈
t=0; //从新再开始计数
c--; //剩余人数减1
cout<
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)