约瑟夫环问题

本文详细阐述了如何解决小孩报数问题,通过编程实现特定逻辑,确保每个小孩按顺序出列。实例展示了输入数据格式及输出结果,适用于理解循环、数组操作及条件判断等基本编程概念。

小孩报数问题

问题描述
  有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。

输入要求
  第一行输入小孩的人数N(N<=64),接下来每行输入一个小孩的名字(人名不超过15个字符) ,最后一行输入W,S (W < N),用逗号”,”间隔
  样例:

5
Xiaoming
Xiaohua
Xiaowang
Zhangsan
Lisi
2,3

输出要求
  按人名输出小孩按顺序出列的顺序,每行输出一个人名
  样例

Zhangsan
Xiaohua
Xiaoming
Xiaowang
Lisi

源码参考

#include<iostream>
using namespace std;
#define MAX 64
char name[MAX][15];
char data[MAX];
int n;
void show(int current);
int main()
{
    int T,i=0;
    cin>>T;
    while(i++<T)
    {
        cin>>name[i];
        i++;
    }
    int W,S;
    cin>>W;
    getchar();
    cin>>S;
    S--;
    n = T;
    for(i=0;i<T;i++)
        data[i] = i;
    int current = W-1;
    while(n!=1)
    {
        current = (current+S)%n;
        show(data[current]);
        for(int i=current;i<n-1;i++)
            data[i] = data[i+1];
        current = (current+1)%n;
        if(current!=0)
            current--;
        n--;
    }
    show(data[0]);

}
void show(int current)
{
    cout<<name[current]<<endl;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值