通过队列思想完成纸牌游戏

184 阅读2分钟

这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战

队列介绍

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 队列中没有元素时,称为空队列。 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。

队列的基本运算

(1)初始化队列:Init_Queue(q) ,初始条件:队q 不存在。操作结果:构造了一个空队;

(2)入队操作: In_Queue(q,x),初始条件: 队q 存在。操作结果: 对已存在的队列q,插入一个元素x 到队尾,队发生变化;

(3)出队操作: Out_Queue(q,x),初始条件: 队q 存在且非空,操作结果: 删除队首元素,并返回其值,队发生变化;

(4)读队头元素:Front_Queue(q,x),初始条件: 队q 存在且非空,操作结果: 读队头元素,并返回其值,队不变;

(5)判队空操作:Empty_Queue(q),初始条件: 队q 存在,操作结果: 若q 为空队则返回为1,否则返回为0。

纸牌游戏案例编程。

纸牌游戏是一个非常经典的C语言编程制作游戏。

纸牌游戏:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;…再依次5的倍数的牌翻一次,6的,7的 直到 以52为基数的 翻过,输出:这时正面向上的牌有哪些?

代码解析

从题中可以得知,从第二张开始,每次会增加一次审查翻牌。所以我们就需要设定两个变量,用于循环。还有一个变量用于存放牌子信息。

#include <stdio.h>
int main()
{
 int i,j;
 
 for (i=1;i<=52;i++)
 {
  int a=2;
  for (j=2;j<=i;j++)
  {
   if (i%j==0)
   {
    a++;
   }
  }
  if (a%2==0)
  {
   printf("%d:是正面\n",i);
  }
 }
 return 0;
}

运行结果图

可以看到在1、4、9、16、25、36、49时是正面。

图片