如何判断4张牌是否可以算出24点

24点游戏是我们经常玩的一种游戏,这种游戏规则简单,但是有时候却非常考验我们的大脑,今天通过c++代码写了一个计算4张牌是否可以组成24点的程序:

#include<iostream>
using namespace std;

const char sign[4] = {'+', '-', '*', '/'};
bool is24 = false; //记录是否可以组成24点 

void isTF(float a[], int len) {
	if (len == 1) {
		if (a[0] > 23.9999 && a[0] < 24.0001) {
			is24 = true;
		}
		return; 
	}
	
	for (int i=0; i<len; i++) {
		for (int j=0; j<len; j++) {
			if (j == i) {
				continue;	
			}
			
			//使用不用的组合来实现 
			for (int k=0; k<4; k++) {
				float t[len - 1];
				char b1[20];
				if (sign[k] == '+') {
					
					t[0] = a[i] + a[j];	
	
				} else if (sign[k] == '-') {
					
					t[0] = a[i] - a[j];	
					
				} else if (sign[k] == '*') {
					
					t[0] = a[i] * a[j];	
					
				} else if (sign[k] == '/') {
					
					t[0] = a[i] / a[j];	
					
				} else {
					break;	
				} 
				int n = 1;
				for (int m=0; m<len; m++) {
					if (m != i && m != j) {
						t[n++] = a[m];
					}
				}
				//递归调用 
				isTF(t, len-1);
			}
		}	
	}
}

int main() {
	
	float t[4];
	while (cin>>t[0]>>t[1]>>t[2]>>t[3]) {
		bool is_ok = true;
		for (int i=0; i<4; i++) {
			if (t[i] <= 0 || t[i] > 13) {
				is_ok = false;
				break; 
			}	
		} 
		
		if (!is_ok) {
			cout<<"输入的数字不合法,请输入1-13之间的数字"<<endl;
			continue;	
		}
		
		isTF(t, 4);
		if (is24) {
			cout<<"可以组成24点"<<endl;	
			is24 = false; 
		} else {
			cout<<"不能组成24点"<<endl;	
		}
	}
	
	return 0;	
}

原则上就是使用递归 + 遍历 来实现的。程序很简单。至于效率在目前这么几个数还是可以接受的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值