24 点游戏的初步算法
2012-05-01 11:22
253 查看
#include <cstdlib> #include <iostream> using namespace std; double a0,a1,a2,a3,a4; int b1,b2,b3; int i; int k=0; int a[13]; const double TARGET = 25; double operate( double a, double b, int c) { switch(c) { case 1: return (a+b); case 2: return (a-b); case 3: return (a*b); case 4: return (a/b); } return 0; } char disp(int a) { switch(a) { case 1: return '+'; case 2: return '-'; case 3: return '*'; case 4: return '//'; } return '?'; } bool sort(int a) { double result; switch(a) { case 1: result = operate(operate(operate(a1,a2,b1),a3,b2),a4,b3); break; case 2: result = operate(operate(a1,operate(a2,a3,b2),b1),a4,b3); break; case 3: result = operate(operate(a1,a2,b1),operate(a3,a4,b3),b2); break; case 4: result = operate(a1,operate(operate(a2,a3,b2),a4,b3),b1); break; case 5: result = operate(a1,operate(a2,operate(a3,a4,b3),b2),b1); break; case 6: result = operate(operate(a1,operate(a2,a3,b2),b1),a4,b3); break; } if( (TARGET-0.0001)<result && result<(TARGET+0.0001) ) return 1; else return 0; } int geta() { switch(i) { case 1: break; case 2: a0=a3;a3=a4;a4=a0; break; case 3: a0=a2;a2=a4;a4=a0; break; case 4: a0=a3;a3=a4;a4=a0; break; case 5: a0=a2;a2=a4;a4=a0; break; case 6: a0=a3;a3=a4;a4=a0; break; case 7: a0=a3;a3=a4;a4=a0; a0=a3;a3=a1;a1=a0; a0=a2;a2=a4;a4=a0; break; case 8: a0=a3;a3=a2;a2=a0; break; case 9: a0=a3;a3=a4;a4=a0; break; case 10: a0=a3;a3=a2;a2=a0; break; case 11: a0=a2;a2=a4;a4=a0; a0=a1;a1=a2;a2=a0; break; case 12: a0=a3;a3=a2;a2=a0; break; case 13: return 0; } a0 = a1*100008 + a2*1005 + a3*12 + a4; int j=0; for(j=1; j<=k; j++) { if(a[j]==a0) { j=155; break; } } if(j==155) { i++; geta(); } else { k++; a[k]=(int)a0; } return 0; } int main(int argc, char *argv[]) { cout << "请输入四个数字,用空格间隔开:"; while(cin >> a1 >> a2 >> a3 >> a4) { int outcome=0; int way; int num=0; for( i=1; i<=12; i++) { geta(); if(i>12) break; for( way=1; way<=5; way++) { for( b1=1; b1<=4; b1++) { for( b2=1; b2<=4; b2++) { for( b3=1; b3<=4; b3++) { if( sort(way) == true ) { switch(way) { case 1: num++; cout << "case " << num << ": " << '(' << '(' << a1 << disp(b1) << a2 << ')' << disp(b2) << a3 << ')' << disp(b3) << a4 << endl; break; case 2: num++; cout << "case " << num << ": " << '(' << a1 << disp(b1) << '(' << a2 << disp(b2) << a3 << ')' << ')' << disp(b3) << a4 << endl; break; case 3: num++; cout << "case " << num << ": " << '(' << a1 << disp(b1) << a2 << ')' << disp(b2) << '(' << a3 << disp(b3) << a4 << ')' << endl; break; case 4: num++; cout << "case " << num << ": " << a1 << disp(b1) << '(' << '(' << a2 << disp(b2) << a3 << ')' << disp(b3) << a4 << ')' << endl; break; case 5: num++; cout << "case " << num << ": " << a1 << disp(b1) << '(' << a2 << disp(b2) << '(' << a3 << disp(b3) << a4 << ')' << ')' << endl; break; } } } } } } } if(num==0) cout << "无解" << endl; cout << "====请继续输入====" << endl; } //system("PAUSE"); return EXIT_SUCCESS; }
相关文章推荐
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 深入浅出游戏算法(3)-lua脚本(2)
- 蓝桥杯 算法训练 传球游戏 神奇的dp
- 一些游戏算法的网址
- 游戏开发中的数学和物理算法(9):三角代数
- C语言之算法初步(汉诺塔--递归算法)
- 帧锁定算法解决游戏同步
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(十)斜度α地图的构造及算法
- STL的binary search算法正确性的初步说明
- 深入浅出游戏算法(3)-lua脚本(8)
- 吴昊品游戏核心算法 Round 15 (补遗篇) —— 吴昊教你玩UnderCut(毫无策略性的纸牌游戏的模拟)