引入
相信大家都玩过斗兽棋,其规则是大动物能吃掉小动物,但最小的动物又能吃掉最大的动物,形成一个生物链闭环。
日常生活中形如这样的情形还有游戏中的属性克制、石头剪刀布等。
实际运用中我们需要对这些情形做出判断,得到结果。
基本思路
假设有四个A、B、C三个对象,A吃B,B吃C,C吃D,D吃A,对象容量为4。
将三者转换成数字,A→0,B→1,C→2,D→3。
可以发现
①(0 + 1)% 4 ==
1 得数与B相等,说明A可以吃B
②(3 + 1)% 4 ==
0 得数与A相等,说明D可以吃A
符合大吃小,最小吃最大的规律
模板
有n
个对象,按从大到小的顺序排好,并对这些对象从0
到n-1
分别赋予意义(可以用函数返回值的方法)。
对于最大和最小,用if((a + 1) % 容量 == b)
判断,如果结果为真,则说明a可以吃b。其他对象结合普通大小规则判断即可
代码实现
以斗兽棋为例
#include <iostream>
using namespace std;
//有象、虎、猫、鼠四种动物,象吃虎、猫;虎吃猫、鼠;猫吃鼠;鼠吃象
int zhao(string a){
if(a == "elephant") return 0;
else if(a == "tiger") return 1;
else if(a == "cat") return 2;
else if(a == "mouse") return 3;
else{
cout << "没有" << a << "这个棋子" << endl;
return 4;
}
}
int main(){
int a, b; //a,b两种棋子
for(int i = 0; i < 4; i++){
string A, B;
cin >> A >> B;
a = zhao(A);
b = zhao(B);
if((a + 1) % 4 == b && a != 4 && b != 4)
cout << "a 赢了" << endl;
else if(a != 0 && a < b && a != 4 && b != 4)
cout << "a 赢了" << endl;
else if(a == 0 && b != 3)
cout << "a 赢了" << endl;
else if((b + 1) % 4 == a && a != 4 && b != 4)
cout << "b 赢了" << endl;
else if(b != 0 && b < a && a != 4 && b != 4)
cout << "b 赢了" << endl;
else if(b == 0 && a != 3)
cout << "b 赢了" << endl;
else if(a == b)
cout << "双赢" <<endl;
}
system("pause");
}