一提到报数,可能大家可能会在第一时间内想到大学军训的美好时光,严厉的教官让我们从头到尾依次的报数。
群号564950050
虽然刚开始很讨厌教官,为什么训练的时候这么严厉,一个个都累的要死,但是当军训快结束的时候大家反而都挺舍不得的了,人就是这么奇怪的动物,(顺带默默地怀念一下以前的教官)。
不扯远了,今天的报数游戏呢,和军训时候教官让我们依次的报数不一样,我们要做的报数游戏呢,是选择一些人站成一圈,从第一个开始顺时针开始报数,一圈之后之后报数停止,念出报到数的人则要出局,然后重新开始下一轮,周而复始,依次计算出每一轮谁会出局,直到剩下最后一个人为止!
群号564950050
(咳咳,素材图是我画的,没找到具体相关的图片,大家将就一下)
玩法呢,就如上面解说的一样,输入玩这个游戏的人数和报到数,然后程序就会计算出每轮所淘汰的那个人,最终留下幸存者(这人肯定运气好,去买注彩票也是极好的)!
群号564950050
下面看代码吧:
/*********************************************************************
*以循环队列的数据结构实现
*时间复杂度T(n)
*采用循环队列数据结构,使得每次对数组的访问次数减少到最少
**********************************************************************/
#include <;
#include <malloc.h>
int main()
{
int i = 0, num = 1, die = 0, front, rear, temp = 0;
while (num != 0)
{
printf("\n输入人数,小于零退出:");
scanf("%d", &num);
printf("\n输入报到数:");
scanf("%d", &die);
int *cycle = (int *)malloc((num + 1) * sizeof(int));
for (i = 0; i <= num; i++)
{
cycle[i] = i;
}
front = 1;
rear = num;
i = 1;
while (front != rear)
{
temp = (rear + 1) % (num + 1);
cycle[temp] = cycle[front];
front = (front + 1) % (num + 1);
if (i == die)
{
i = 1;
printf("%d出队\n", cycle[temp]);
}
else
{
i++;
rear = (rear + 1) % (num + 1);
cycle[rear] = cycle[temp];
}
}
printf("幸存者是%d\n", cycle[front]);
free(cycle);
num = 0;
}
return 0;
}
其实这段代码很简单,并不是很难,只是大家学习C语言之后却没有学会怎么运用所学知识的思想,也就是所谓的 “ 我能看懂程序代码是怎么运行的,可是,程序是怎么设计出来的就完全懵逼了。” 成了只会看而不会写的人!
所以说想学习编程思维的话,可以加下群564950050,群里大家一起交流学习心得。