数三出局(数组实现)

数三出局 (数组实现)

1.这个代码是针对有序数组的,在开始的时候需要对数组进行插入数据,我这里是直接赋值,你们也可以从键盘赋值,都是一样的

2.思路:定义一个两个变量,一个count用于计算数了多少次,一个other用于计算鲨掉的人数,当数到3时就鲨掉一个然后把它所在的位置置为0,然后count加从新从0开始数(当然也可以用%3的方法,这样就不用每次都把count置0),然后other也加1,一直循环到最后other鲨掉的人数等于总人数减1就跳出循环

/*
 *题目: 围圈数三出局
 *思路:如果到三就标志为0,围圈数的时候就到num就跳到第一位
 *          输出时判断如果标志为0的就不输出

 */

#include <stdio.h>

int main(int argc,const char **argv)
{
	int num;//人数
	int other=0; //用于记录出局人数
	int i;//用于循环
	int count=0; //计数
	 
	printf("请输入人数:\n");
	scanf("%d",&num);

	//用于存储人数
	int person[num];

	//把数组里面的内容从1开始排序赋值进去
	//person[0] = 1;
	//person[1] = 2;
	//........
	for(i=0; i<num; i++) 
		person[i]=i+1;
	
	i=0;//把i置为0,用于下面代码,可节省内存,避免申请过多内存

	//每次杀一个人,other加加1,直到杀掉的人等于总人数减1就跳出循环(证明只剩下最后一个人)
	while(other!=num-1)
	{
		//如果第i位是0就跳过,不等于0就计数的次数就加1
		if(person[i]!=0)  
			count++;  

		//如果count数到3的人就把它所在的地方置为0
		if(count==3)  
		{
			person[i]=0;//置0 
			count=0; //从新开始计数
			other++; //杀掉的人数++
		}

		i++; //往前挪一位
		
		//如果i到了最后一位,就把i赋值为0 ,然后从头开始继续数
		if(i>num-1)  
			i=0;
	}
	
	//最后把数组中不是0的输出,他就是最后剩下的那一个
	for(i=0; i<num; i++)
	{
		if(person[i]!=0)
			printf("剩下的是第%d个人!\n",person[i]);//打印最后剩下的那个## 标题
	}

	return 0;
}

第一次写博客,没经验,有写的不好的地方请见谅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值