在学linux_C的第8.5节的用代码实现石头、剪刀、布,并且是人机对战时,突然想到蛋疼的sheldon不是独创了Rock, Paper, Scissors, Lizard and Spock了咩,于是开始写代码欲实现。先说说书上的代码逻辑吧:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>int main(void)
{char gesture[3][10]={"scissor","stone","cloth"};int man,computer,result,ret;srand(time(NULL));while(1){computer=rand()%3;printf("\nInuput your gesture (0-scissor 1-stone 2-cloth:\n");ret =scanf("%d",&man);if(ret!=1||man<0||man>2){printf("Invalid input! Please input 0,1 or 2.\n");continue;}printf("Your gesture:%s\tComputer's gesture:%s\n",gesture[man],gesture[computer]);result=(man-computer+4)%3-1;if(result>0)printf("You win!\n");else if(result==0)printf("Draw!\n");elseprintf("You lose!\n");}return 0;
}

0、1、2三个整数分别是剪刀石头布在程序中的内部表示,用户也要求输入0、1或2,然后和计算机随机生成的0、1或2比胜负;书上该节末尾也提出了一个问题:(man - computer + 4) % 3 - 1这个神奇的表达式是如何比较出0、1、2这三个数字在“剪刀石头布”意义上的大小的?

man 和computer的取值只能是0 1 2,那么
man - computer 的结果可以是1,-2  0  -1,2
(man赢的取值是1,-2  平的取值是0,输的取值是-1,2)
加上4之后可以是  5,2(赢)   4(平)  3,6(输)
对3进行取余后只有 2(赢)   1(平)     0(输)
再减1  最后只有      1(赢)   0(平)   -1 (输)
其实并不一定非要用这个表达式,只要成功实现这个逻辑即可。

对于Rock, Paper, Scissors, Lizard and Spock的输赢关系是怎样的呢?可以先见链接:http://www.hjenglish.com/new/p114866/

同样,我们用0,1,2,3,4分别来定义Rock, Paper, Scissors, Lizard and Spock,并且用矩阵来分析人机对战的结果:

那么man-computer的值与人的输赢关系如下图:

那么逻辑关系就很明了了:

将man-computer赋值给一个变量d_value意为差值,分为三种情况分别讨论,伪代码如下:

if(d_value==0)平局
else if (d_value > 0)
{if (d_value为奇数)man lose!;elseman win;
}
else
{if (d_value为奇数)man win;elseman lose;
}

全部代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>int main(void)
{char gesture[5][10] ={ "scissor", "paper", "rock", "lizard", "spock" };int man, computer, d_value, ret;srand(time(NULL));while (1) {printf("\*\*\*\*\*\*\*\*\*\*\*\*\*\*\n");computer = rand() % 5;printf("\nInuput your gesture (0-scissor 1-paper 2-rock 3-lizard 4-spock:\n");ret = scanf("%d", &man);printf("ret=%d\n", ret);if (ret != 1 || man < 0 || man > 4) {printf("Invalid input! Please input 0,1,2,3 or 4.\n");continue;}printf("Your gesture:%s\tComputer's gesture:%s\n",gesture[man], gesture[computer]);d_value = man - computer;if (d_value == 0)printf("Draw!\n");else if (d_value > 0) {if (d_value % 2 == 0)printf("You win!\n");elseprintf("You lose!\n");} else {if (d_value % 2 == 0)printf("You lose!\n");elseprintf("You win!\n");}}return 0;
}

(Rock, Paper, Scissors, Lizard and Spock)sheldon谢耳朵独创的剪刀,布,石头,蜥蜴,史波克 用代码实现相关推荐

  1. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)...

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  2. 计蒜客A1676 Rock Paper Scissors Lizard Spock

    链接 https://nanti.jisuanke.com/t/A1676 题解 每种分开算,比如我先考虑出 s c i s s o r s scissors scissors,把模式串中的所有 S ...

  3. 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FFT)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FF ...

  4. Python编程基础:第三十七节 石头剪刀布游戏Rock, Paper, Scissors Game

    第三十七节 石头剪刀布游戏Rock, Paper, Scissors Game 前言 实践 前言 我们这一节的内容主要是对前边学习内容的一个综合应用,以石头,剪刀,布游戏为例讲解列表.随机数.用户输入 ...

  5. 【Codeforces 1426 E】Rock, Paper, Scissors,贪心!算反面

    problem E. Rock, Paper, Scissors time limit per test1 second memory limit per test256 megabytes inpu ...

  6. CodeForces - 1426E Rock, Paper, Scissors(最小费用最大流+最大费用最大流)

    题目链接:点击查看 题目大意:A 和 B 在玩石头剪刀布,A 会出 a1 次石头,a2 次剪刀,a3 次布,同理 B 会出 b1 次石头,b2 次剪刀,b3 次布,若对战顺序是可以进行决定的,问 A ...

  7. Problem H Rock Paper Scissors,FFT

    题目 题目链接 题意 给出两段石头剪刀布的顺序SSS和T" role="presentation" style="position: relative;&quo ...

  8. Rock Paper将为圣地亚哥教士棒球队开发AR游戏

    7月18日青亭网报道,联想.摩托罗拉,以及Rock Paper Reality,将联合圣地亚哥教士棒球队开发一款棒球主题的AR游戏. 很显然,目前高通骁龙Spaces XR开发套件就是基于上述硬件:摩 ...

  9. 2017ACM ICPC Asia Regional-Daejeon H-Rock Paper Scissors[ FFT]

    题目大意 给你两个字符串,N,M |N|>|M|,经过转换之后,问你,连续的一段,能够匹配上的最大元素个数. n <1e5 题目分析 题目求区间内匹配数最大.考虑区间有n^2个,暴力做显然 ...

  10. 石头剪子布蜥蜴史波克python_Python石头布剪刀蜥蜴斯波克饲养

    代码如下:import random numberofgames = raw_input("How many games do you want to play?") print ...

最新文章

  1. 【数据结构】顺序循环队列及其实现(C语言)
  2. [JZOJ5459]【NOIP2017提高A组冲刺11.7】密室
  3. springCloud(22):Eureka总结提升
  4. 改来改去把微服务改成了分布式单体
  5. Java更改中文_Java中文编程开发,让Java编写更改复杂
  6. ClassicLink概述
  7. ubuntu下adb突然找不到显示List of devices attached
  8. WCF技术内幕之面向服务
  9. 图书馆系统java实训报告_基于Java的图书馆管理系统的设计实习报告
  10. tfidf+embedding
  11. Laravel中使用GuzzleHttp调用第三方服务的API接口
  12. Running “flutter pub get“ in xxx... 报错: Git error 443
  13. 程序员的圣诞礼物:计算机寓言之夏
  14. 力扣739:每日温度【C++】
  15. 微积分:闭区间上 有界、可积、连续、可导 的强弱关系
  16. 号码锁 Combination Lock [USACO1.4]
  17. ipa在线安装搭建_AppCake,手机端签名安装IPA,无需越狱
  18. 自动化测试+性能面试题整理--个人最新【持续更新】
  19. 云端原生数据泄露事件解析
  20. 公司(视频 社交)项目分享

热门文章

  1. 【BI学习心得04-ALS算法与推荐系统】
  2. python100天发音_GitHub - hhttss999/Python-100-Days: Python - 100天从新手到大师
  3. 使用JavaScript实现动态效果
  4. 控制服务器系统,控制服务器操作系统
  5. 【目标跟踪 MOT】JDE - Towards Real-Time Multi-Object Tracking
  6. Linux之用户和权限
  7. Word文件批量查找替换字符串
  8. ucenter 用户加密方式
  9. 利用tushare分析CAPM模型
  10. Stata实验——计算个股“上海机场“的市场模型和CAPM模型的β值