c语言石头剪子布算法

#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("\nInput 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");
else printf("You lose!\n"); } return 0;}
这是c语言石头剪子布游戏的code,请问“(man - computer + 4) % 3 - 1”这个表达式的思路是什么呢?谢谢!

第1个回答  推荐于2016-02-05
用简单的c语言实现:

#include<stdio.h>

int main()
{
int num1,num2 ;
printf("请玩家输入<1表示石头、2表示剪子、3表示布>:");
scanf("%d",&num1);
printf("请玩家输入<1表示石头、2表示剪子、3表示布>:");
scanf("%d",&num2);
//枚举可能出现的各种情况
if(num1==1 && num2==1) // 1 1
{
printf("玩家一选择石头 ,玩家二选择石头,平局\n");
}
else if(num1==1 && num2==2) // 1 2
{
printf("玩家一选择石头 ,玩家二选择剪子,玩家一胜利\n");
}
else if(num1==1 && num2==3) //1 3
{
printf("玩家一选择石头 ,玩家二选择布,玩家二胜利\n");
}
else if(num1==2 && num2==1) //2 1
{
printf("玩家一选择剪子 ,玩家二选择石头,玩家二胜利\n");
}
else if(num1==2 && num2==2) //2 2
{
printf("玩家一选择剪子 ,玩家二选择剪子,平局\n");
}
else if(num1==2 && num2==3) //2 3
{
printf("玩家一选择剪子 ,玩家二选择布,玩家一胜利\n");
}
else if(num1==3 && num2==1) //3 1
{
printf("玩家一选择布 ,玩家二选择石头,玩家一胜利\n");
}
else if(num1==3 && num2==2) //3 2
{
printf("玩家一选择布 ,玩家二选择剪子,玩家二胜利\n");
}
else //3 3
{
printf("玩家一选择布 ,玩家二选择布,平局\n");
}
return 0;
}
第2个回答  推荐于2018-03-02
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 (输)

我认为编此程序 首先分析出 man - computer 的结果可以是1,-2 0 -1,2
其中(man赢的取值是1,-2 平的取值是0,输的取值是-1,2) 利用一些数学表达式运算 把这三类区别开就可以,不一定拘泥在“(man - computer + 4) % 3 - 1”之上。本回答被提问者和网友采纳
相似回答