P1996 约瑟夫问题
2018-06-17 22:36:41来源:未知 阅读 ()
题目背景
约瑟夫是一个无聊的人!!!
题目描述
n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.
输入输出格式
输入格式:n m
输出格式:出圈的编号
输入输出样例
10 3
3 6 9 2 7 1 8 5 10 4
说明
你猜,你猜,你猜猜猜......
猜不着吧,我也不告诉你!!!‘
我确信我的是对的
但是不知道为什么会超时
跟填涂颜色那题一样
明明在自己机子上秒出但是超时??
1 #include<cstdio> 2 #include<cstring> 3 const int MAXN=10001; 4 int vis[MAXN]; 5 int flag=0; 6 int main() 7 { 8 int n,m; 9 scanf("%d%d",&n,&m); 10 int tot=0; 11 int i=1;//有几个人报数 12 int now=1;// 正在枚举第几个人 13 while(tot<n) 14 { 15 while(vis[now+1]==0&&i<m&&now<n){i++;now++;} 16 if(i==m) 17 { 18 tot++; 19 i=0; 20 vis[now]=1; 21 printf("%d ",now); 22 continue; 23 } 24 while(vis[now+1]!=0) 25 {now=now++;if(vis[now]==0)i++;} 26 27 if(now==n)now=0; 28 } 29 return 0; 30 }
1 #include<iostream> 2 using namespace std; 3 int n,m; 4 bool out[102];//out[i]:记录点i是否已经出圈,为true则已出圈,之后循环需要跳过i;false则表示还未出圈 5 int main() 6 { 7 scanf("%d%d",&n,&m); 8 int cnt=0,now=0,tot=0;//cnt:当前数的数 now:当前轮到第几个人 tot:已出圈人数,用来在达到条件时结束循环(等于总人数n) 9 while(tot!=n) 10 { 11 cnt++;now++; 12 if(cnt==m+1)//循环处理,形成一个环 13 cnt=1; 14 if(now==n+1)//同上 15 now=1; 16 while(out[now])//当now这个人已经出圈时,应跳过now,直到找到下个未出圈的人(out[now]=false) 17 { 18 ++now; 19 if(now==n+1)//形成环 20 now=1; 21 } 22 if(cnt==m)//当前数到m,now出圈,总出圈人数+1 23 out[now]=1,++tot,printf("%d ",now); 24 } 25 return 0; 26 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Leetcode:49. Group Anagrams
下一篇:进程查杀
- WDK驱动调试问题点滴 2020-04-21
- 螺旋矩阵问题 2020-04-18
- 用C++实现:完美的代价 2020-04-15
- 用C++实现:FJ的字符串打印 2020-04-04
- [题记-数学-面试题]约瑟夫环-leetcode 2020-03-30
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash