首页 > 算法分析 > 石头剪刀布程序——C语言实现

石头剪刀布程序——C语言实现

当我们决定不了谁去干活或者谁去HAPPY的时候,我们就会通过石头、剪刀、布来决定谁去。在现实生活中,我们可以通过敏锐的观察和快速的反应达到百战不输。但是,和计算机我们只能来来随机的了,那大部分是看运了哈(其实计算机的运也掌握在你的手里 :arrow: )。

下面来看看如何用C实现剪刀石头布程序的,其他语言也是一样的。

我们把石头剪刀布定义在二维数组中,然后电脑随机(其实是伪随机)的出,人是自己决定出什么。在判断输赢算法上有两个思路:

1、列出所有的可能结果,一个一个去判断。这样做比较麻烦,而且容易漏。

2、通过(man – computer + 4) % 3 -1;算法去判断,你可以思考下,这个算法公式是如何进行的。

具体的代码如下:

 
 
1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4
 5 int main()
 6 {
 7     char *gesture[3] = {"scissor", "stone", "cloth"};
 8     int man, computer, ret, result;
 9
 10     srand(time(NULL));
 11     while(1)
 12     {
 13         computer = rand() % 3;
 14         printf("input your gesture");
 15         printf("(0 for scissor; 1 for stone; 2 for cloth)\n");
 16         ret = scanf("%d", &man);
 17
 18         if(ret != 1 || man < 0 || man >2)
 19         {
 20             printf("Invalid input!\n");
 21             return 1;
 22         }
 23
 24         printf("\nYou:%s\tComputer:%s\n", gesture[man], gesture[computer]);
 25         //核心算法
 26         result = (man - computer + 4) % 3 -1;
 27         if(result > 0)
 28             printf("You win!\n");
 29         else if(result == 0)
 30             printf("Draw!\n");
 31         else
 32             printf("You lose!\n");
 33     }
 34
 35     return 0;
 36 }

 

在这个程序中,我们的主要难点在(man – computer + 4) % 3 -1;这个表达式是如何计算出石头剪刀布的结果的。

 

转载请标明出处:萝卜根

原文地址请标明:原文地址

  1. 2011年4月6日06:55 | #1

    1、(man – computer) 的结果可能是:-2,-1,0,1,2
    当man赢的情况是: -2和1
    平的情况是:0
    输的情况是:-1和2
    2、加4后情况变成:
    man赢的情况是: 2和5
    平的情况是:4
    输的情况是:3和6
    3、%3后的情况是:
    man赢的情况是: 2
    平的情况是:1
    输的情况是:0
    4、减1后的情况是:
    man赢的情况是: 1
    平的情况是:0
    输的情况是:-1

    最后得出结果。。。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
*

:yund: :yun: :yes: :xiaxia: :xiaom: :xiaohan: :wuyu: :wuxiao: :woshou: :woquan: :wink: :tiaodou: :tiaod: :sikao: :pa: :oops: :ok: :no: :mad: :lihai: :leihua: :lei: :ku: :konghe: :kbu: :jiwai: :jiong: :jiay: :huo: :huaixiao: :hanxiao: :han: :haha: :guolai: :guan: :guai: :ganga: :eek: :dou: :diao: :deng: :buli: :bizui: :bishi: :biggrin: :arrow: