平面设计网站有什么,上海快速建设网站公司,电子商城系统平台,免费搭建微信网站设计解题代码来源于一本书#xff1a;《算法竞赛#xff1a;入门到进阶》
圆桌上围坐着2n个人。其中n个人是好人#xff0c;另外n个人是坏人。如果从第一个人开始数数#xff0c;数到第m个人#xff0c;则立即处死该人#xff1b;然后从被处死的人之后开始数数#xff0c;再…解题代码来源于一本书《算法竞赛入门到进阶》
圆桌上围坐着2n个人。其中n个人是好人另外n个人是坏人。如果从第一个人开始数数数到第m个人则立即处死该人然后从被处死的人之后开始数数再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位能使得在处死n个人
之后圆桌上围坐的剩余的n个人全是好人。
输入
多组数据每组数据输入好人和坏人的人数n32767、步长m32767
输出
对于每一组数据输出2n个大写字母‘G’表示好人‘B’表示坏人50个字母为一行不允许出现空白字符。相邻数据间留有一空行。
输入示例
2 3 2 4
输出示例
GBBG
BGGB
解题思路如下
创建数组将索引值存入数组的值。这样在淘汰人之后剩下的都是好人剩下的数组的值就是原来的索引值位置
在从头循环人数一次如果索引值等于上面剩下来的数组值就是好人反之为坏人
#include vector
#include algorithm
#include iostream
using namespace std;int main() {//模拟圆桌vectorint table;//n是好人数m是步长int n, m;while (cin n m) {//先清空table.clear();for (int i 0; i 2 * n; i) {//按顺序将索引入向量table.push_back(i);}int pos 0;for (int i 0; i n; i) {//每次淘汰的位置圆桌pos (pos m - 1) % table.size();table.erase(table.begin() pos);}int j 0;for (int i 0; i 2 * n; i) {//50字换行if ((i % 50) 0 i) {cout endl;}//好人输出Gif (j table.size() i table[j]) {j;cout G;} else {cout B;}}cout endl endl;}return 0;
}