约瑟夫问题 小孩报数问题poj3750

                                            小孩报数问题

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 15228   Accepted: 6778

Description

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

Input

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

Output

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

Sample Input

5
Xiaoming
Xiaohua
Xiaowang
Zhangsan
Lisi
2,3

Sample Output

Zhangsan
Xiaohua
Xiaoming
Xiaowang
Lisi

约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。

此题也是约瑟夫问题,此题有多种解法,可用链表,数组,还有vector等等,以下代码vector所写

 1 #include<stdio.h>
 2 #include<vector>
 3 #include<string>
 4 #include<iostream>
 5 using namespace std;
 6 vector<string> str;
 7 int n;
 8 int W,S;
 9 int bg,en;
10 int main(){
11     freopen("in.txt","r",stdin);
12     scanf("%d",&n);
13     for(int i=0;i<n;i++){
14         string s;
15         cin>>s;
16         str.push_back(s);
17     }
18     scanf("%d",&W);
19     W--;        //由于vector数组从0开始,所以此时W要减一
20     getchar();
21     scanf("%d",&S);
22     while(!str.empty()){
23         int len=str.size();
24         W=(W+S-1)%len;
25         cout<<str[W]<<endl;
26         str.erase(str.begin()+W);
27     }
28 }
时间: 2024-10-25 07:50:28

约瑟夫问题 小孩报数问题poj3750的相关文章

POJ 3750,小孩报数问题,模拟约瑟夫问题

小孩报数问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9978   Accepted: 4649 Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序. Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩

小孩报数问题(循环链表)_约瑟夫

小孩报数问题(循环链表) TimeLimit:1000MS  MemoryLimit:65536K 64-bit integer IO format:%lld Problem Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序. Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名

poj 3750 小孩报数问题 (约瑟夫问题)

小孩报数问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9883   Accepted: 4597 Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序. Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩

POJ 3750 小孩报数问题 (线性表思想 约瑟夫问题 数组模拟运算的 没用循环链表,控制好下标的指向就很容易了)

小孩报数问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10423   Accepted: 4824 Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序. Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小

POJ3750_小孩报数问题【约瑟夫环】【string】【list】

小孩报数问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10309 Accepted: 4783 Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序. Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字

约瑟夫环 poj 3750 小孩报数问题 模拟

Language: Default 小孩报数问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10071   Accepted: 4702 Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序. Input 第一行输入小孩的人数N

poj 3750 小孩报数问题

小孩报数问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10523   Accepted: 4882 Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序. Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小

POJ 3750 小孩报数问题 数据结构水

小孩报数问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11739   Accepted: 5403 Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序. Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小

POJ3750:: 小孩报数问题(约瑟夫问题)

又一次因为一个小错误,POJ上Wrong Answer了无数次..... 在差不多要放弃的时候,发现了这个猥琐的不能再猥琐的bug,改完了提交就AC了,简直无语.... 本题wo采用模拟方法: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 struct child{ 6 char name[16]; 7 int id; 8 //child(stri