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

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <Windows.h>
//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;
}

运行结果如下:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脱发使我稳重

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值