hdu4841 圆桌问题 使用vector向量模拟
问题描述:
圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。
输入:
多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(<=32767);
输出:
对于每一组数据,输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行,不允许出现空白字符。相邻数据间留有一空行。
输入样例:
2 3
2 4
输出样例:
GBBG
BGGB
典型的约瑟夫问题。基本思路:在vector向量中保存2n个连续的整数代表位置,来模拟整个圆桌,根据题目要求,删掉第m个数(代表处死的坏人位置),直至只剩下n个数(代表好人的位置)。最后定义一个变量从最初2n个数最小的那个数开始递增,相当于每次遍历一个位置,与vector中的对应位置的值作比较,相等则代表此处原先坐着好人,否则此处原先坐着坏人。也就是找到该被处死的位置,再把坏人插到该些位置。
要注意输入输出的格式,一定不能马虎。
AC代码(c