约瑟夫环“报数123喝酒”游戏的实现(对应打出每个人喝酒的顺序)问题!

#include 
#include 
#include 
#include 
#include 
//2023年5月22日07:18:17   学习练习此题


/*
	编程时间:有n个人围成一圈,顺序排号约瑟夫环(喝酒退出游戏)。
	从第一个人开始报数(1-3报数),凡事报到3(赋值为0)退出圈子,问最后留下的是原来的第几号位置的人。
*/


int main(void)
{
	int PaiHao[100] = {1,1,1,1};//随机声明,实际值由下面的for循环遍历赋值为1
	for (int i = 1; i <= 12; i++)
	{
		PaiHao[i] = 1;		//参与的人数都对号入座;
		printf("%-4d", PaiHao[i]);
	}
	printf("\n");
	int count = 12;
	int baoShu;
	int XiaBiao;
	//第一个人位置、报数号
	XiaBiao = 0;
	baoShu = 0;
	第二个人位置、报数号
	//XiaBiao++;
	//baoShu++;
	第二个人位置、报数号
	//XiaBiao++;
	//baoShu++;
	
	while (count > 0)
	{
		XiaBiao++;
		baoShu++;

		while (PaiHao[XiaBiao] == 0)		//等于0的那个人退出(喝趴了)
		{
			XiaBiao++;		//下一个人开始
			if (XiaBiao > 12)		//判断一轮是否结束
			{
				XiaBiao = 1;//如果结束(下标值赋值为0)轮完一轮从第一个从头开始再来寻找没喝酒的人完
			}
		}
		if (baoShu == 3)		//谁报数为3的,直接赋值为0;喝酒喝趴了
		{
			//将喊了3的下标赋值为0(下次碰到了直接下一个)并且打印
			PaiHao[XiaBiao] = 0;
			printf("%-4d", XiaBiao);//谁需要喝酒,按顺序 打印他的位置
			count--;				//人数减一
			baoShu = 0;				//报数为0,刷新
		}
	}
	
	return 0;
}

运行结果如下:

 

你可能感兴趣的:(C语言经典算法,c语言,算法)