codevs 1282 约瑟夫问题
来源:互联网 发布:淘宝好评返现怎么弄 编辑:程序博客网 时间:2024/06/06 17:22
codevs 1282 约瑟夫问题
题目描述 Description
有编号从1到N的N个小朋友在玩一种出圈的游戏。开始时N个小朋友围成一圈,编号为I+1的小朋友站在编号为I小朋友左边。编号为1的小朋友站在编号为N的小朋友左边。首先编号为1的小朋友开始报数,接着站在左边的小朋友顺序报数,直到数到某个数字M时就出圈。直到只剩下1个小朋友,则游戏完毕。
现在给定N,M,求N个小朋友的出圈顺序。
输入描述 Input Description
唯一的一行包含两个整数N,M。(1<=N,M<=30000)
输出描述 Output Description
唯一的一行包含N个整数,每两个整数中间用空格隔开,第I个整数表示第I个出圈的小朋友的编号。
样例输入 Sample Input
5 3
样例输出 Sample Output
3 1 5 2 4
题解:
#include<iostream>#include<cstdio>using namespace std;int a[100000+10];int main(){ int n,m; int s=1; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { a[i]=i; } int i; while(n) { i=(s+m-1)%n;//找出数到的小朋友 if(i==0) { i=n; } printf("%d ",a[i]); for(int j=i;j<n;j++) { a[j]=a[j+1];//删除数到的小朋友 } n--; s=i; } return 0;}
暴力(TLE):
#include<iostream>#include<cstdio>using namespace std;int vis[100000+10];int main(){ int n,t; scanf("%d%d",&n,&t); int ans; int now=0; int x=0; for(int k=1;k<=n;k++) { while(x<t) { now++; if(now>n) { now=1; } if(vis[now]) { continue; } else { x++; } } x=0; vis[now]=1; ans=now; printf("%d ",ans); } return 0;}
2 0
- Codevs-1282 约瑟夫问题
- codevs 1282 约瑟夫问题
- 【codevs 1282】约瑟夫问题
- CODEVS 1282 约瑟夫问题
- codevs 1282 约瑟夫问题
- 【codevs 1282】 约瑟夫问题 【题解】
- Codevs 1282 约瑟夫问题 线段树
- 线段树 约瑟夫问题 codevs 1282
- 【CODEVS】1282 约瑟夫问题(线段树)
- codevs 1282 约瑟夫问题 大暴力? 解题报告
- codevs 1282 约瑟夫问题 树状数组正解 解题报告
- WIKIOI 1282 约瑟夫问题
- wikioi 1282 约瑟夫问题
- Wikioi 1282 约瑟夫问题
- Wiki OI 1282 约瑟夫问题
- 约瑟夫问题、约瑟夫环
- 约瑟夫问题
- 约瑟夫问题
- 从对联学古文
- linux中cat、more、less、tail、head命令的区别
- 获取bilibili视频封面的方法
- 嵌入式Linux移植之内存初始化和地址映射
- 盒模型+浮动做页面布局
- codevs 1282 约瑟夫问题
- redis持久化--rdb
- cmake OpenCV遇到的一些问题
- 【月度————阶段性总结201609】
- 第六周 项目2-建立链队算法库
- Java自学之路-new的一些问题
- 关于UIView用户交互相关的属性和方法
- 微信公众号开发自动收发消息
- 网易2017秋招编程题2