C语言实现纸牌游戏之小猫钓鱼算法

 更新时间:2019年01月15日 15:49:14   作者:Gerald Kwok  
这篇文章主要为大家详细介绍了C语言实现纸牌游戏之小猫钓鱼算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现小猫钓鱼算法的具体代码,供大家参考,具体内容如下

星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。(用两个队列和一个栈完成)

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
 
#include <stdio.h>
#include <stdlib.h>
 
/*
* 游戏规则是这样的,将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两个人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及中间的牌全部拿走,并依次放到自己手中的牌的末尾。当任意一个人手上的牌全部打完时,另一个人获胜
* 郭文峰
* 2018/9/29
*/
 
struct queue
{
 int data[1000];
 int head;
 int tail;
};
 
struct stack
{
 int data[10];
 int top;
};
 
int main(void)
{
 struct queue q1, q2;
 struct stack s;
 int i = 0;
 int t = 0;
 int book[10];
 
 //初始化队列
 q1.head = 1;
 q1.tail = 1;
 q2.head = 1;
 q2.tail = 1;
 
 //初始化栈
 s.top = 0;
 
 for (i = 0; i < 10; i++)
 {
 book[i] = 0;
 }
 
 //依次向队列插入6个数
 //给小哼6张牌
 for (i = 1; i <= 6; i++)
 {
 scanf("%d", &q1.data[q1.tail]);
 q1.tail++;
 }
 
 //依次向队列插入6个数
 //给小哈6张牌
 for (i = 1; i <= 6; i++)
 {
 scanf("%d", &q2.data[q2.tail]);
 q2.tail++;
 }
 
 //当队列不为空的时候执行循环
 while (q1.head < q1.tail && q2.head < q2.tail)
 {
 t = q1.data[q1.head];//小哼出一张牌
 //判断小哼打出的牌是否能赢
 if (book[t] == 0)//表明桌上没有牌面为t 的牌
 {
 q1.head++;
 s.top++;
 s.data[s.top] = t;
 book[t] = 1;
 }
 else
 {
 q1.head++;
 q1.data[q1.tail] = t;
 q1.tail++;
 while (s.data[s.top] != t)
 {
 book[s.data[s.top]] = 0;
 q1.data[q1.tail] = s.data[s.top];
 q1.tail++;
 s.top--;
 }
 }
 
 t = q2.data[q2.head];//小哈出一张牌
 //判断小哈打出的牌是否能赢
 if (book[t] == 0)//表明桌上没有牌面为t 的牌
 {
 q2.head++;
 s.top++;
 s.data[s.top] = t;
 book[t] = 1;
 }
 else
 {
 q2.head++;
 q2.data[q2.tail] = t;
 q2.tail++;
 while (s.data[s.top] != t)
 {
 book[s.data[s.top]] = 0;
 q2.data[q2.tail] = s.data[s.top];
 q2.tail++;
 s.top--;
 
 }
 
 }
 }
 
 if (q2.head == q2.tail)
 {
 printf("小哼WIN\n");
 printf("小哼手上还剩的牌为:");
 for (i = q1.head; i <= q1.tail - 1; i++)
 {
 printf(" %d", q1.data[i]);
 }
 
 if (s.top > 0)
 {
 printf("\n桌上的牌是:");
 for (i = 1; i <= s.top; i++)
 {
 printf(" %d", s.data[i]);
 }
 }
 else
 {
 printf("桌上没有牌了!\n");
 }
 }
 else
 {
 printf("小哈WIN\n");
 printf("小哈手上还剩的牌为:");
 for (i = q2.head; i <= q2.tail - 1; i++)
 {
 printf(" %d", q2.data[i]);
 }
 
 if (s.top > 0)
 {
 printf("\n桌上的牌是:");
 for (i = 1; i <= s.top; i++)
 {
 printf(" %d", s.data[i]);
 }
 }
 else
 {
 printf("桌上没有牌了!\n");
 }
 }
 
 system("pause");
 
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 深入分析Linux下如何对C语言进行编程

    深入分析Linux下如何对C语言进行编程

    本篇文章介绍了,如何在Linux下对C语言进行编程的详细概述。需要的朋友参考下
    2013-05-05
  • C++ Boost Container库示例详细讲解

    C++ Boost Container库示例详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • 深入探究C++中的容器适配器与仿函数技术

    深入探究C++中的容器适配器与仿函数技术

    C++中的容器适配器和仿函数是实现数据结构与算法的重要技术,容器适配器可以将一个容器转换为另一个形式,仿函数则可以自定义数据类型的比较、排序、计算等行为,提高程序的灵活性和可重用性
    2023-04-04
  • C++实现简单的HTTP服务器

    C++实现简单的HTTP服务器

    这篇文章主要为大家详细介绍了C++实现简单的HTTP服务器的相关资料,感兴趣的朋友可以参考下
    2016-05-05
  • c语言和c++语言中const修饰的变量区别浅析

    c语言和c++语言中const修饰的变量区别浅析

    这篇文章主要给大家介绍了关于c语言和c++语言中const修饰的变量区别的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • AVX2指令集优化整形数组求和算法

    AVX2指令集优化整形数组求和算法

    这篇文章主要为大家介绍了AVX2指令集优化整形数组求和算法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • c++中std::hash以及万能hash的使用方式

    c++中std::hash以及万能hash的使用方式

    这篇文章主要介绍了c++中std::hash以及万能hash的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C/C++语言中结构体的内存分配小例子

    C/C++语言中结构体的内存分配小例子

    当未用 #pragma 指令指定编译器的对齐位数时,结构体按最长宽度的数据成员的宽度对齐;当使用了 #pragma 指令指定编译器的对齐位数时,结构体按最长宽度的数据成员的宽度和 #pragma 指令指定的位数中的较小值对齐
    2013-10-10
  • C++ Boost Algorithm算法超详细精讲

    C++ Boost Algorithm算法超详细精讲

    Boost.Algorithm 提供了补充标准库算法的算法。与 Boost.Range 不同,Boost.Algorithm 没有引入新概念。 Boost.Algorithm 定义的算法类似于标准库中的算法
    2022-10-10
  • C++ 程序员为什么看不起php程序员

    C++ 程序员为什么看不起php程序员

    由于当今市场状况,各种培训班飞起,PHPer越来越多,学习成本很低。导致了很多人对PHP的误解。其实PHP学到深入的时候,所需知识很多,并不是表面看到的那样。另外,PHP确实严谨性不高,这个跟C++,java确实都没法比。但是,PHP在web开发中的效率,是其他语言所不能比的
    2017-02-02

最新评论