C / C++:斗兽棋型比较大小

引入

相信大家都玩过斗兽棋,其规则是大动物能吃掉小动物,但最小的动物又能吃掉最大的动物,形成一个生物链闭环。
日常生活中形如这样的情形还有游戏中的属性克制、石头剪刀布等。
实际运用中我们需要对这些情形做出判断,得到结果。

基本思路

假设有四个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个对象,按从大到小的顺序排好,并对这些对象从0n-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"); 
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值