从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1)随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式
算法设计思路:
24点算法有4个随机数以及中间的三个符号组成,四个数字的排列组合有24种情况,3个符号有4的3次方种情况,对这1526种情况进行计算寻找能形成24点的情况,同时记录下已经形成24点的符号数字,若之后形成的24点算法出现的数字和符号都相同,则视为重复情况,不再记录。
源代码:
#include <iostream>
#include "stdlib.h"
#include "time.h"
#include "string.h"
using namespace std;
int find24=0; //find24用来记录是否存在24的算法
int outmain=0; //储存了是否结束主函数的变量
int cfu=0; //计数
int cf[7][10]; //用于存放能形成24点的情况
char fh(int a) //根据输入的数返回符号
{
switch(a)
{
case 1:
return('+'); //1表示加号
case 2:
return('-'); //2表示减号
case 3:
return('*'); //3表示乘号
case 4:
return('/'); //4表示除号
default:
break;
}
}
double suan(double a,double b,int s) //计算输入的a和b,s表示运算符号
{
double an=0;
switch(s)
{
case 1:
an=a+b; break;
case 2:
an=a-b;break;
case 3:
an=a*b;break;
case 4:
an=a/b;break;
default:
break;
}
return an; //返回计算结果
}
void suan2(int a,int b,int c,int d,int s1,int s2,int s3) //abcd为输入的四个数,s123表示运算符号
{
double zhong;
char fhw[3];
fhw[0]=fh(s1); fhw[1]=fh(s2); fhw[2]=fh(s3); //将s123转换为运算符
zhong=suan(a,b,s1); //计算a和b
zhong=suan(zhong,c,s2); //计算ab后的结果再和c计算
zhong=suan(zhong,d,s3); //计算abc后再与d计算
if(zhong==24) //如果得到了24点,输出结果
{
int shud=0;
cf[0][cfu]=a;cf[1][cfu]=b;cf[2][cfu]=c;cf[3][cfu]=d; //储存结果
cf[4][cfu]=s1;cf[5][cfu