【c++】约瑟夫环的一维数组实现

【问题描述】

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

【输入形式】

       第一行一个整数表示测试数据的组数s,接下来的s行每行包含三个正整数,分别表示好人和坏人的人数n(<=32767)、起点m、步长k(<=32767)

【输出形式】

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

【样例输入】

2
2 2 3
2 2 4
【样例输出】
GGBB
BBGG
#include
using namespace std;
int main(){
	int num;
	cin>>num;
	for(int l=0;l>n>>m>>k;
		int tc=0,yc=1,count=0,bs=0;
		int bj[2*n];
		for(int i=0;i<2*n;i++){
			bj[i]=1;
		}
		while(1){
			for(int i=0;i<2*n;i++){
				if(yc==1){
					i=m-1;
					yc=0;
				}
				if(bj[i]==1){
					bs++;
					if(bs==k){
						bj[i]=0;
						count++;
						bs=0;
					}
				}
				if(count==n){
					tc=1;
					break;
				}		
			}
			if(tc==1)break;
		}	
		for(int i=0;i<2*n;i++){
			if(bj[i]==1)cout<<"G";
			else cout<<"B";
		}
	}
	return 0;
}



你可能感兴趣的:(HNU实验题)