圆桌问题

Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 6757 Accepted Submission(s): 2550

Problem Description
圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。

Input
多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(<=32767);

Output
对于每一组数据,输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行,不允许出现空白字符。相邻数据间留有一空行。

Sample Input
2 3
2 4

Sample Output
GBBG

BGGB

问题链接:HDU4841 圆桌问题
问题简述:(略)
问题分析
    约瑟夫环问题,用模拟法来解决。
    可以用数组实现模拟,也可以用STL的向量vector实现模拟,也可以用STL的队列queue实现模拟。也许使用STL的链表list也可以实现模拟。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序(数组模拟)如下:

/* HDU4841 圆桌问题 */#include <bits/stdc++.h>using namespace std;const int N = 32767;
const int N2 = 2 * N;
bool flag[N2];int main()
{int n, m;while(~scanf("%d%d", &n, &m)) {memset(flag, true, sizeof(flag));int sum = 2 * n, cur = 0;while(sum > n) {for(int i = 0; i < 2 * n; i++) {if(!flag[i]) continue;if(sum <= n) break;cur++;if(cur == m) {flag[i] = false;cur = 0;sum--;}}}for(int i = 0; i < 2 * n; i++) {putchar(flag[i] ? 'G' : 'B');if((i + 1) % 50 == 0) putchar('\n');}putchar('\n');putchar('\n');}return 0;
}

AC的C++语言程序(使用vector模拟)如下:

/* HDU4841 圆桌问题 */#include <bits/stdc++.h>using namespace std;const int N = 32767;
const int N2 = 2 * N;
bool flag[N2];int main()
{int n, m;while(~scanf("%d%d", &n, &m)) {memset(flag, true, sizeof(flag));vector<int> v(2 * n);for(int i = 0; i < 2 * n; i++) v[i] = i;int cur = 0;while((int)v.size() > n) {cur = (cur + m -1) % v.size();flag[v[cur]] = false;v.erase(v.begin() + cur);}for(int i = 0; i < 2 * n; i++) {putchar(flag[i] ? 'G' : 'B');if((i + 1) % 50 == 0) putchar('\n');}putchar('\n');putchar('\n');}return 0;
}

AC的C++语言程序(使用queue模拟)如下:

/* HDU4841 圆桌问题 */#include <bits/stdc++.h>using namespace std;const int N = 32767;
const int N2 = 2 * N;
bool flag[N2];int main()
{int n, m;while(~scanf("%d%d", &n, &m)) {memset(flag, true, sizeof(flag));queue<int> q;for(int i = 0; i < 2 * n; i++) q.push(i);int cur = 0;while((int)q.size() > n) {if(++cur == m) {flag[q.front()] = false;q.pop();cur = 0;} else {q.push(q.front());q.pop();}}for(int i = 0; i < 2 * n; i++) {putchar(flag[i] ? 'G' : 'B');if((i + 1) % 50 == 0) putchar('\n');}putchar('\n');putchar('\n');}return 0;
}

HDU4841 圆桌问题【约瑟夫环+模拟+STL】相关推荐

  1. hdu4841 圆桌问题-vector容器模拟

    Problem Description 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始数数,数到第m个人,则立即处死该人:然后从被处死的人之后开始数数,再将数到的第m个人 ...

  2. 7-5 模拟报数游戏(约瑟夫环问题):有n个人围成一圈从1开始按顺序编号从第一个人开始从1到k报数,报到k的人退出圈子;然后圈子缩小,下一个人继续,问最后留下的是第几号(只留1 人)。要求定义函数

    学习记录与分享 PTA程序设计类教学平台-Python作业二(循环结构程序设计) 题目 7-5 模拟报数游戏(约瑟夫环问题) 有n个人围成一圈,从1开始按顺序编号,从第一个人开始从1到k报数,报到k的 ...

  3. 链表基础操作 / 循环链表约瑟夫环/STL链表基本操作

    链表的基础操作 程序功能 输入几 就把几调到数最前面 程序步骤: 1.插入函数 2.初始化函数 3.删除节点 4.把排列展示出来 程序注意 不同函数的指针 不同 头指针定义为全局变量 代码实现截图 # ...

  4. 约瑟夫环问题(圆桌问题)

    约瑟夫环 约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒.一群人表决说要死.所以用一种策略来先后kill所有人 ...

  5. PHP解决约瑟夫环问题

    PHP解决约瑟夫环问题 一.总结 二.PHP解决约瑟夫环问题 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到 ...

  6. 约瑟夫环之循环链表实现

    约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开 始报数,数到m的那个人又出列:依此规律 ...

  7. 约瑟夫环-(数组、循环链表、数学)

    约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出 ...

  8. 动态规划解决约瑟夫环问题

    题目: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号0,1,2,3-n-1分别表示)围坐在一张圆桌周围.从编号为0的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m ...

  9. python约瑟夫环算法和流程图_约瑟夫环问题及python与c++实现效率对比

    约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重 ...

最新文章

  1. 用html CSS实现砸金蛋,css3+js 实现砸金蛋效果
  2. cocos2dx 3.3final UserDefault有个坑?
  3. boost::container实现扩展bwd测试分配器程序
  4. BZOJ 4720 [Noip2016]换教室
  5. Android安装两次才成功,Android应用从市场安装完成打开与桌面打开,被启动两次的问题...
  6. Java从零基础到精通教程全套视频课程
  7. web 开发之js---页面缓存, jsp 缓存, html 缓存, ajax缓存,解决方法
  8. pandas切片操作
  9. VOIP侵蚀电信利益,未来最赚钱的行业.
  10. android课程设计时钟,单片机制作的电子钟(含闹钟功能)课程设计报告
  11. mifare classic 2.2.3中文_Adobe Lightroom Classic CC 2019 v8.4.1 中文完整直装版
  12. 一次外网打不开网站的故障总结
  13. c#设计模式之简单工厂
  14. C++ STL 源码剖析之 Traits 编程技法
  15. vcpkg:使用 vcpkg
  16. koreader下载_kindle koreader
  17. 各种浏览器怎么换ip
  18. jQuery弹出层插件Dialog
  19. SpaceSyntax【空间句法】之DepthMapX学习:第三篇 软件介绍与一般分析流程图
  20. java毕业设计汽车售后服务管理系统源码+lw文档+mybatis+系统+mysql数据库+调试

热门文章

  1. Ubuntu snap for 树莓派
  2. Spring如何配置bean属性
  3. chrome浏览器的跨域设置
  4. 网页游戏为什么容易赚钱?(From:07073)
  5. 如何把平板的虚拟键盘关掉_想知道Win10电脑启动使用的是BIOS还是UEFI,这该如何分辨?...
  6. c语言中状态机的作用,C语言中的状态机
  7. java抽象类的字段_java打印出继承体系的类(包括抽象类)、接口、域字段
  8. 【HIVE 之 DDL,DML】
  9. localhost 拒绝了我们的连接请求。_Zipkin请求链路日志聚合
  10. Linux基础——搭建自己的云计算, 多电脑共享你云端文件