【GDUT】快乐地玩耍

快乐地玩耍

描述

有n个小伙伴(按顺时针将他们编号为0~n-1)坐在一起,围成一个圈快乐地玩耍。现在他们在玩一个游戏,从第0号小伙伴开始报数(报数从1开始),接下来顺时针下一位小伙伴报2,依次类推,一旦有谁报的号码是K的倍数,那么他就要退出这个圈,留下其他人继续玩。最终全部人都会都退出来,现在要求的是全部人出圈的顺序。

比如n=5,k=3。那么出圈的顺序就是 2 0 4 1 3.数字表示小伙伴们的编号。

输入

输入文件的第一行为一个整数T,表示总共有T组数据。

接下来有T行,每行有两个整数n,k。1<=n,k<=100。

输出

对于每组数据,输出一行n个整数,每两个整数间用空格隔开,表示出圈顺序。

输入样例 1

2
5 3
3 5

输出样例 1

2 0 4 1 3
1 2 0

Solution

模拟环形数组

Code

int T,n,k;
int c[105];
bool st[105];

int main(){
	
	cin >> T;
	while(T --){
		int cnt1 = 0, cnt2 = 0;  //初始化
		memset(st,0,sizeof st);
		cin >> n >> k;
		
		for(int i = 0; cnt2 < n ; i ++){  
			if(i == n)i = 0;   //如果越过终点,回到起点
			if(!st[i]){   //如果没有出圈
				cnt1 ++;   //记录次数
			}
			if(cnt1 == k){   //如果是k的倍数
				cnt1 = 0;   //记录归0
				st[i] = 1;    //出圈
				cnt2 ++;    //出圈人数加一
				cout << i;    //输出当前出圈人的序号
				if(cnt2 != n)cout << " ";
				else cout << endl;   //最后一个人换行
			}
		}
	}
	return 0;
} 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值