解24点的算法
来源:互联网 发布:视频剪辑合成配音软件 编辑:程序博客网 时间:2024/05/17 05:18
小时候经常玩的小游戏,开发儿童智力==闲着无聊写了个程序,再也不用费脑子啦~
思路如下:
0. 开始的时候想添加括号,加减乘除四种符号进去,但是太麻烦了,作罢。
1.按照正常做法,每次取出两个,有加减乘除四种计算方法,得到的结果和剩下的两个再进行运算,不断地取两个进行运算,直到只剩下一个结果,再与24比较。
2.打印的时候没有想好办法,定义了一个全局变量string r[]存放结果。
代码如下:
#include <iostream>#include <sstream>#include <string>#include "df.h"using namespace std;int num[4]={8,6,2,1};string r[3];void print(){ for(int i=0;i<3;++i){ cout<<r[i]<<endl; } cout<<endl;}string trans(double i)//数字转化为string类型,学习了{ ostringstream ost; ost << i; string temp(ost.str()); return temp;}double plus(double a,double b){return a+b;}double minus(double a,double b){return a-b;}double multi(double a,double b){return a*b;}double divi(double a,double b){return a/b;}string makeString(double a,double b,double res,char op){//每一步的结果变成一个算式 string result = trans(a); result+=op; result+=trans(b); result+='='; result = result+trans(res); return result;}void process2(double a,double b){ r[2] = makeString(a,b,a+b,'+'); if(a+b==24){ print(); } r[2] = makeString(a,b,a-b,'-'); if(a-b==24){ print(); } r[2] = makeString(a,b,a*b,'*'); if(a*b==24){ print(); } r[2] = makeString(a,b,a/b,'/'); if(a/b==24){ print(); }}void process3(double a0,double a1,double a2){ int a=a0,b=a1; r[1] = makeString(a,b,a+b,'+');process2(a+b,a2); r[1] = makeString(a,b,a-b,'-');process2(a-b,a2); r[1] = makeString(a,b,a*b,'*');process2(a*b,a2); r[1] = makeString(a,b,a/b,'/');process2(a/b,a2); a=a0;b=a2; r[1] = makeString(a,b,a+b,'+');process2(a+b,a1); r[1] = makeString(a,b,a-b,'-');process2(a-b,a1); r[1] = makeString(a,b,a*b,'*');process2(a*b,a1); r[1] = makeString(a,b,a/b,'/');process2(a/b,a1); a=a1;b=a2; r[1] = makeString(a,b,a+b,'+');process2(a+b,a0); r[1] = makeString(a,b,a-b,'-');process2(a-b,a0); r[1] = makeString(a,b,a*b,'*');process2(a*b,a0); r[1] = makeString(a,b,a/b,'/');process2(a/b,a0);}void process4(){ int a,b,c,d; for(int i=0;i<3;++i){ for(int j=i+1;j<4;++j){ a = num[i]; b = num[j]; for(int k=0;k<4;++k){ if(num[k]!=a&&num[k]!=b){ c=num[k]; break; } } for(int k=0;k<4;++k){ if(num[k]!=a&&num[k]!=b&&num[k]!=c){ d=num[k]; break; } } { r[0] = makeString(a,b,a+b,'+');process3(a+b,c,d); r[0] = makeString(a,b,a-b,'-');process3(a-b,c,d); r[0] = makeString(a,b,a*b,'*');process3(a*b,c,d); r[0] = makeString(a,b,a/b,'/');process3(a/b,c,d); } } }}int main(){ process4(); return 0;}
0 0
- 解24点的算法
- “24点”的算法分析
- 我的24点算法
- 24点游戏的算法
- 一个24点的算法
- 24点算法的java代码
- 我的24点算法思路
- 关于24点问题的算法
- 24 点游戏的初步算法
- python版本的24点游戏算法
- 一个朴素的24点算法
- 24点游戏的算法实现
- 点的旋转算法
- 判断24点算法,是否有解
- [修改]24点算法
- 24点算法
- 24点算法
- 24点算法
- VMWare下扩展Linux硬盘空间
- 安卓中常用的方法总结
- 长城守卫 Beijing guards CERC 2004 LA3177 解题总结
- Apache Solr单机环境配置(包括中文分词和Java API的使用)
- 断箭:不相信自己的意志,永远也做不成将军
- 解24点的算法
- trustZone初探(一)
- Java中的两个ArrayList
- 如何学习一门新语言
- iOS开发之打包上传到App Store——(三)申请证书并且发布应用程序到App Store
- c++下载文件解决服务器缓存问题
- 张正友标定法 【计算机视觉学习笔记--双目视觉几何框架系列】
- vijos p1014 (旅行商简化版 双进程DP)
- 最小的k个数