数三出局 (数组实现)
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;
}
第一次写博客,没经验,有写的不好的地方请见谅