教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 实用文档 >

24点游戏C语言代码及报告

来源:网络收集 时间:2025-09-22
导读: 24点游戏 一,问题分析 二十四点游戏规则: 给出4个数字,所给数字均为有理数,用加、减、乘、除(可加括号)把给出的数算成24.每个数必须用一次且只能用一次,先算出结果者获胜。 步骤:比如下面的例子: 例:3、8、8、9, 答案1:(9—8)83 答案2: 38

24点游戏

一,问题分析

二十四点游戏规则:

给出4个数字,所给数字均为有理数,用加、减、乘、除(可加括号)把给出的数算成24.每个数必须用一次且只能用一次,先算出结果者获胜。

步骤:比如下面的例子:

例:3、8、8、9,

答案1:(9—8)×8×3

答案2: 3×8 ÷(9—8)

答案3:(9—8÷8)×3

利用3×8=24、4×6=24求解

我的主要想法是 首先穷举的可行性问题。我把表达式如下分成三类——

1、 无括号的简单表达式。

2、 有一个括号的简单表达式。

3、 有两个括号的较复4、 杂表达式。

穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列

二,源程序及注释

//首先穷举的可行性问题。我把表达式如下分成三类——

//1、 无括号的简单表达式。

//2、 有一个括号的简单表达式。

//3、 有两个括号的较复4、 杂表达式。

//穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列

#include <iostream>

#include <string>

using namespace std;

int number=0;

string sss[5000];

float cal(float a,float b,int p)

{

switch(p)

{

case 1:return a+b;

case 2:return a-b;

case 3:return a*b;

case 4:return a/b;

case 5:return b-a;

case 6:return b/a;

}

}

string link(string a,string b,int p)

{

string st=a;

switch(p)

{

case 1:st+=("+"+b);break;

case 2:st+=("-"+b);break;

case 3:st+=("*"+b);break;

case 4:st+=("/"+b);break;

case 5:st=b+"-"+st;break;

case 6:st=b+"/"+st;break;

}

st="("+st+")";

return st;

}

void putout1(string c[],int p[])

{

string st;

st=link(c[1],c[2],p[1]);

st=link(st,c[3],p[2]);

st=link(st,c[4],p[3]);

st=st.erase(0,1);

st=st.erase(st.length()-1,1);

number++;

sss[number]=st;

}

void putout2(string c[],int p[])

{

string st1,st2,st;

st1=link(c[1],c[2],p[1]);

st2=link(c[3],c[4],p[3]);

st=link(st1,st2,p[2]);

st=st.erase(0,1);

st=st.erase(st.length()-1,1);

number++;

sss[number]=st;

}

void suan(float a[],string c[])

{

int p[4];int i;float sum,sum1,sum2;

for(p[1]=1;p[1]<=6;p[1]++)

for(p[2]=1;p[2]<=6;p[2]++)

for(p[3]=1;p[3]<=6;p[3]++)

{

sum=cal(a[1],a[2],p[1]);

sum=cal(sum,a[3],p[2]);

sum=cal(sum,a[4],p[3]);

if((sum-24>=0&&sum-24<1e-5)||(sum-24<=0&&sum-24>-1e-5)) putout1(c,p); sum1=cal(a[1],a[2],p[1]);

sum2=cal(a[3],a[4],p[3]);

sum=cal(sum1,sum2,p[2]);

if((sum-24>=0&&sum-24<1e-5)||(sum-24<=0&&sum-24>-1e-5)) putout2(c,p); }

}

void disorder(float a[],string c[])

{

float b[5];

string d[5];

int i,j,k,l;

for(i=1;i<=4;i++)

for(j=1;j<=4;j++)

{

if(j==i)continue;

for(k=1;k<=4;k++)

{

if(k==i||k==j)continue; for(l=1;l<=4;l++)

{

if(l==i||l==j||l==k)continue;

b[1]=a[i];b[2]=a[j];b[3]=a[k];b[4]=a[l];

d[1]=c[i];d[2]=c[j];d[3]=c[k];d[4]=c[l];

suan(b,d); }

}

}

}

int main()

{

cout<<"请输入四个数字";

float a[5];

int i,j;

string c[5];

for(i=1;i<=4;i++){cin>>a[i];if(a[i]==10)c[i]="10" c[i]=int(a[i])+'0';}

disorder(a,c);

int v=1,u=0;

for(i=1;i<=number;i++)

{v=1;for(j=1;j<i;j++)if(sss[i]==sss[j])v=0; if(v==1){cout<<sss[i]<<endl;u=1;}}

if(u==0)cout<<"无解"<<endl;

system("pause");

return 0;

}

三,运行结果显示

;else

四,调试和运行程序过程中产生的问题及采取的措施:

…… 此处隐藏:519字,全部文档内容请下载后查看。喜欢就下载吧 ……
24点游戏C语言代码及报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1111553.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)