POJ3750
2015-07-15 16:47
190 查看
#include <iostream> #include <stdio.h> #include <cstring> using namespace std; int main() { int i,j,w,s,n; char a[65][16]; int p[65]; scanf("%d",&n); for(i=1;i<=n;i++) { p[i]=i; scanf("%s",&a[i]); } scanf("%d,%d",&w,&s); w=(w+n)%n; while(n-1){ w=(w+s-1)%n; printf("%s\n",a[p[w]]); for(j=w;j<n;j++) p[j]=p[j+1]; n--; cout<<w<<" "<<n<<endl; } return 0; } //WA代码↑
POJ3750
题意:约瑟夫环问题。
输入:
n(人数)
str(人的姓名)
w(起始下标)s(间隔人数)
输出:
str(人的姓名)
思路:约瑟夫环问题,直接模拟起始w=(w+n-1)%n,出去下标w=(w+s-1)%n,在后面要把环的下标更新即可。
AC代码:
#include <iostream> #include <stdio.h> #include <cstring> using namespace std; int main() { int i,j,w,s,n; char a[65][16]; int p[65]; scanf("%d",&n); for(i=0;i<n;i++) { p[i]=i; scanf("%s",&a[i]); } scanf("%d,%d",&w,&s); w=(w+n-1)%n; while(n){ w=(w+s-1)%n; printf("%s\n",a[p[w]]); for(j=w;j<n-1;j++) p[j]=p[j+1]; n--; // cout<<w<<" "<<n<<endl; } return 0; }
相关文章推荐
- Codeforces 558E A Simple Task(线段树区间更新)
- Spring Bean生命周期
- kbengine 0.6.5安装
- Dokuwiki
- MySQL视图学习整理
- ScrollView起始位置不是最顶部的解决办法
- PTAM算法流程介绍
- 【Android】检测是否处于Wifi环境,利用WebView实现浏览器app
- [笔记] Ubuntu下编译ffmpeg+openh264+x264
- ScrollView起始位置不是最顶部的解决办法
- Ubuntu下Sublime Text 2的安装
- 在游戏中添加Chipmunk 物理引擎
- 分割
- Javascript语言精粹(二)
- 织梦网采集
- eclipse 新建一个Java Project所要注意的几个设置选项
- YT05-动态归划求解课后题目-1003—免费馅饼 -(6.21日-烟台大学ACM预备队解题报告)
- 链表的创建、查询、删除,插入;
- 巧用translate设置元素垂直水平居中
- 【转】java中创建对象的方法