24点游戏是经典的纸牌益智游戏。 常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏

#include
#include
#include
#include
#include
#include

//将两个数进行加减乘除运算;
float CalculateTry(float x, float y,int n)
{
switch (n)
{
case 0:
return x + y;
case 1:
return x - y;
case 2:
return x * y;
case 3:
return x / y;
default:
break;
}
}

//根据n判断当前使用的运算符;
char symbol(int n)
{
switch (n)
{
case 0:
return ‘+’;
case 1:
return ‘-’;
case 2:
return ‘*’;
case 3:
return ‘/’;
default:
break;
}
}

//用来计算用户的表达式,每计算一次则将指针前移一个字符;
float Calculate(char *& ch)
{
float num = 1;
float sum = 0;
int KaTeX parse error: Expected group after '_' at position 1: _̲ = 1; // KaTeX parse error: Expected group after '_' at position 1: _̲用于表示数字前的符号是正还是负;
do
{

switch (*(ch))

{
case 0:
return 0;
case 1:
num = 1;
break;
case 2:
num = 2;
break;
case 3:
num = 3;
break;
case 4:
num = 4;
break;
case 5:
num = 5;
break;
case 6:
num = 6;
break;
case 7:
num = 7;
break;
case 8:
num = 8;
break;
case 9:
num = 9;
break;
case ‘+’:
sum = sum + num*KaTeX parse error: Expected group after '_' at position 1: _̲; KaTeX parse error: Expected group after '_' at position 1: _̲ = 1;
break;
case ‘-’:sum = sum + num*KaTeX parse error: Expected group after '_' at position 1: _̲; KaTeX parse error: Expected group after '_' at position 1: _̲ = -1;
break;
case '’: //碰到或/,计算机会再向前取一个数字,并在开始新一次循环是结束乘除运算;
ch++;
if
(ch>‘0’&&ch<=‘9’) num=num(ch-‘0’);
else
{
num=num
Calculate(++ch);
}
break;
case ‘/’:
ch++;
if
(ch>‘0’&&ch<=‘9’) num=num(ch-‘0’);
else
{
num=num/Calculate(++ch);
}
break;
case ‘(’: //碰到左括号,运用递归运算;
num=num
Calculate(++ch);
break;
case ‘)’: //碰到右括号,结束递归运算;
sum = sum + num
KaTeX parse error: Expected group after '_' at position 1: _̲; KaTeX parse error: Expected group after '_' at position 1: _̲ = -1;
return sum;
break;
case ’ ':
break;
default :
sum = sum + num
KaTeX parse error: Expected group after '_' at position 1: _̲; KaTeX parse error: Expected group after '_' at position 1: _̲ = -1;
return sum;
break;
}
ch++;
}

while (true);

}

bool pcCalculate24(float*a)
{
float b[3];
float c[2];
float d;
int bx = 0;
int cx = 0;
int dx = 0;

for (int i1 = 0; i1 < 4; i1++)
{
for (int i2 = 0; i2 < 4; i2++)
{
if (i1 == i2)
continue;
for (int i3 = 0; i3 < 4; i3++)
{
if (i3 != i1&&i3 != i2)
{
b[bx] = a[i3];
bx++;
}
}
for (int n1 = 0; n1 < 4; n1++)
{
b[2] = CalculateTry(a[i1], a[i2], n1);

for (int ii1 = 0; ii1 < 3; ii1++)
{
for (int ii2 = 0; ii2 < 3; ii2++)
{
if (ii1 == ii2)
continue;
for (int ii3 = 0; ii3 < 3; ii3++)
{
if (ii3 != ii1&&ii3 != ii2)
{
c[cx] = b[ii3];
cx++;
}
}
for (int n2 = 0; n2 < 4; n2++)
{
c[1] = CalculateTry(b[ii1], b[ii2], n2);

for (int n3 = 0; n3 < 4; n3++)
{
d = CalculateTry(c[0], c[1], n3);
if (d == 24.0)
{
printf("%g %c %g = %g\n", a[i1], symbol(n1), a[i2], b[2]);
printf("%g %c %g = %g\n", b[ii1], symbol(n2), b[ii2], c[1]);
printf("%g %c %g = %g\n", c[0], symbol(n3), c[1], d);
return 1;
}
d = CalculateTry(c[1], c[0], n3);
if (d == 24.0)
{
printf("%g %c %g = %g\n", a[i1], symbol(n1), a[i2], b[2]);
printf("%g %c %g = %g\n", b[ii1], symbol(n2), b[ii2], c[1]);
printf("%g %c %g = %g\n", c[1], symbol(n3), c[0], d);
return 1;
}
}
cx = 0;
}
}
}
bx = 0;
}
}
return 0;

}
}
int main()
{
float a[4];
char yorn;
int ForT = 0;
char isContinue = ‘N’;
float result;
char ch[20] ;
char *p = &ch[0];
do
{

//首先产生四个随机数

for (int i=0; i<4; i++)
{
srand((unsigned int)(time(0)));
Sleep(1000);
a[i] = rand() % 9 + 1;
printf("%g “, a[i]);
}
printf(”\n");

do
{
printf(“计算机能否给出正确答案’Y’or’N’:”); //提示是否给出答案,建立无止尽的循环,让用户无数次输入;
scanf("%c", &yorn);
getchar();

if (yorn==‘Y’||yorn==‘y’) //如果用户输入Yes或yes,则计算机用穷尽的方法来计算24,并输出一种方法。
{
pcCalculate24(a) ; //该函数为自定义函数,用于计算机算24,参数为数组a,也就是随机产生的4个数。
printf(“是否继续进行游戏?\n”);
scanf("%c", &isContinue);
getchar();
break; //计算机给出方法后退出当前循环,开始新的算24
}
printf(“请输入您的计算式:”); //如果用户输入的字符不是Y或y,则让用户列计算式(单行计算式)。
scanf("%s", ch);
getchar();
p = &ch[0]; //在下面的自定义函数Cauculate中改变了指针P,将指针P重新指向a[0]。
if ((result=Calculate§)==24) //自定义函数Cauculate用来计算输入的算式;将结果返回并存在result中,检查结果是否为24;
{
printf(“恭喜你,计算正确!Q\n”); //是24则判定正确;在用户输入Y后开始新的24,或输入N结束程序;
printf(“是否继续?\n”);
scanf("%c", &isContinue);
getchar();
break;
}

else if (result==0) //如果用户输入的结果不是24,而是0;就让计算机穷解;
{
if (pcCalculate24(a)) //穷解后若有解则给出答案,并提示用户判断错误;退出循环;开始新24或结束程序;
{
printf(“有解,判断错误\n”);
printf(“是否继续?‘Y’or’N’\n”);
scanf("%c", &isContinue);
getchar();
break;
}

else //穷解后若无解,提示用户判断正确;退出循环;开始新24或结束程序;
{
printf(“无解,判断正确\n”);
printf(“是否继续?‘Y’or’N’\n”);
scanf("%c", &isContinue);
getchar();
break;
}
}

else
printf(“很抱歉,计算式不正确\n”); //用户输入的表达式即不等于24,也不等于0;则提示用户输入错误,重新输入;
}
while (1);

}
while (isContinue==‘Y’||isContinue==‘y’); //根据用户输入的Y或N来开始新的24或结束程序;
return 0;

}

首先,计算机自动随机给出四个数字,例如下面的例子,随机产生了3,7,1,4。有以下的两种情况产生:计算机能不能计算出正确的答案使得四个数字通过加减乘除运算得出计算结果为24。在输入Yes后计算机会产生步骤,截图如下:
24点游戏是经典的纸牌益智游戏。 常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏_第1张图片
在一轮的计算完成之后,计算机会继续提示用户是否继续进行游戏,同时会有两个答案,在用户输入Yes后,会继续重复第一步的操作,继续随机给出四个数字,剩下的步骤重复上面的即可,截图如下:
24点游戏是经典的纸牌益智游戏。 常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏_第2张图片
在计算机随机给出四个数字和操作步骤之后,计算机会给出用户是否继续进行游戏的决定,此时如果用户选择No进行退出会出现以下的界面,截图如下:
24点游戏是经典的纸牌益智游戏。 常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏_第3张图片
在计算机随机给出四个数字之后,计算机会出现一条语句,计算机能否给出正确答案,此时的用户如果输入No,会提示让用户输入自己的解题步骤会出现以下的界面,截图如下:
24点游戏是经典的纸牌益智游戏。 常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏_第4张图片

算法设计思路如下:
24点游戏是经典的纸牌益智游戏。 常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏_第5张图片

你可能感兴趣的:(24点游戏是经典的纸牌益智游戏。 常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏)