B - 小孩报数问题

原创 2018年04月16日 20:48:34

B - 小孩报数问题

 
有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

代码(list实现):

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<list>
using namespace std;

int main(void)
{
	list<string> lis;
	string s1;
	int t,i,n,m,w,s;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		cin>>s1;
		lis.push_back(s1);
	}
	scanf("%d,%d",&w,&s);//被题目的逗号坑了好久。。
	list<string>::iterator it=lis.begin();
	for(i=1;i<w;i++)
	{
		it++;
	}
	i=1;
	while(!lis.empty())
	{
		i=1;
		while(i<s)
		{
			++it;
			++i;
			if(it==lis.end())
			{
				it=lis.begin();
			}
		}
		cout<<*it<<endl;
		it=lis.erase(it); 
		if(it==lis.end())
		{
			it=lis.begin();
		}
		if(lis.size()==1)
		{
			cout<<lis.front()<<endl;
		    lis.pop_back(); 
		    break;
		}
	}
	return 0;
} 
代码(数组实现):


#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>

using namespace std;


int main(void)
{
	int idex[70];
	string s1[70];
	int m,n,w,s,i,j,k;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		cin>>s1[i];
		idex[i]=0;
	}
	scanf("%d,%d",&w,&s);
	i=w;
	k=s;
	m=n;
	while(m)
	{
		if(idex[i]==0)
		{
			k--;
			if(k==0)
			{
				cout<<s1[i]<<endl;
				idex[i]=1;
				m--;
			    k=s;
			}
		}
		i++;
		if(i>n)
		i=1;
	}
	return 0;
 } 


版权声明: https://blog.csdn.net/nucleare/article/details/79966196

小孩子报数问题

F - 小孩报数问题 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Sta...
  • hz18790581821
  • hz18790581821
  • 2016-08-16 20:53:15
  • 237

北京大学ACM---poj3750---小孩报数问题(循环链表求解法)

通过这个简单的循环链表的例子,相信大家也认识到野指针的危害,很遗憾,目前并没有有效的办 法去判断一个指针是否为野指针,free 和 delete 后的未置空指针也是野指针(虽然delete听起来 很霸...
  • csm201314
  • csm201314
  • 2017-03-25 20:59:30
  • 418

小孩报数问题

  • 2014年01月12日 21:37
  • 473B
  • 下载

poj 3750 小孩报数问题(队列Queue)

不多说,《算法》第4版 习题1.3.37 Josephus问题 // poj 3750 import java.util.Scanner; public class Main { pr...
  • Kazama_Kenji
  • Kazama_Kenji
  • 2016-09-20 21:04:04
  • 304

北大ACM poj3750 小孩报数问题

小孩报数问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7233   Accepte...
  • gubojun123
  • gubojun123
  • 2012-07-29 05:31:03
  • 3463

POJ-3750 小孩报数问题-约瑟夫问题

小孩报数问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11759   Accepted: 5418 ...
  • MIKASA3
  • MIKASA3
  • 2015-08-25 16:41:37
  • 1228

POJ 3750 小孩报数问题

约瑟夫环问题 第一行为N,表示有N个男孩 借来书
  • u010487789
  • u010487789
  • 2014-11-15 18:00:05
  • 915

poj 3750 小孩报数问题(循环链表)

#include #include using namespace std; struct List{//双向链表结构体 char name[20]; struct List *front; ...
  • ChallenChenZhiPeng
  • ChallenChenZhiPeng
  • 2012-10-28 18:32:53
  • 1009

poj 3750 小孩报数问题

靠,竟然模拟还得用半个小时。这题直接一个一个慢慢找,数据量实在太小了,最多时间复杂度就是(n*n),被拿出去的数据在vis数组做个标记。 #include #include #include usi...
  • purevegetable
  • purevegetable
  • 2013-09-10 13:29:25
  • 795

poj3750约瑟夫环,循环队列

Description有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人...
  • u013491262
  • u013491262
  • 2015-12-08 09:15:59
  • 407
收藏助手
不良信息举报
您举报文章:B - 小孩报数问题
举报原因:
原因补充:

(最多只允许输入30个字)