C语言 报数问题

本文介绍了一个使用C语言实现的13人围圈报号游戏,游戏中每个人按顺序报1、2、3,报到3的人退出,直到最后剩下一人。通过结构体存储每个参与者的原始序号、报号和生存状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小白人士,如有高见,欢迎分享。

/*13个人围成圈,从第一个人开始顺序报号1,2,3,凡是3者退出圈子,求最后圈中人原来的序号 利用结构体实现*/
#include<stdio.h>
#define PERSON 13//参与人数
#define SIGN 3 //退出暗号

struct person{
	int no;//原始序号
	int num;//报号
	int survival;//存活元素
}p[PERSON],*p_p = p;

//函数原型
void person_no();
void person_out();


void main(){
	person_no();
	person_out();
	//打印测试
	for(;p_p < p + PERSON;p_p++){
		if(p_p->survival == 1)
		printf("no = %d | num = %d | survival = %d\n",p_p->no,p_p->num,p_p->survival);
	}
}

//分配原始序号
void person_no(){
	int temp = 1;
	for(int i = 0;i < PERSON;i++){
		(p_p+i)->no = temp++;
		(p_p+i)->survival = 1;
	}
}

void person_out(){
	//临时变量用于给元素顺序赋值 1 2 3
	int temp = 1;
	//统计淘汰的人数
	int p_out = 0;
	//当淘汰到最后一位时退出循环
	while(PERSON - p_out > 1){
		
		for(int i = 0; i < PERSON;i++){
			//判断当前元素是否存活
			if((p_p+i)-> survival == 1){
				//按1 2 3顺序赋值给存活的元素
				(p_p+i)-> num = temp++;
				//判断元素是否等于3
				if((p_p+i)-> num == SIGN){
					//元素值为3时淘汰元素
					(p_p+i)-> survival = 0;
					//统计淘汰数量
					p_out++;}
				//重置变量
				if(temp > SIGN)temp=1;
			}	
		}
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值