编程实现24点游戏
2022/2/11 17:14:03
本文主要是介绍编程实现24点游戏,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
编程实现24点游戏
- 思路
- 代码
思路
比如有4个数 2 11 9 7
将2与24进行加减乘除运算,比如 24-2=22 ,那么问题就是11 9 7三个数怎么运算能耐得到22,同理11与22运算 比如22/11=2 那就编程9和7如何运算得到2的问题了。
这样将4个数的问题逐步缩小成2个数的问题。
但是这种逻辑和数的顺序有关,所以一边下来如果无解,利用下标变化依次将位置提前 s3(24 - x[i], x[(i + 1) % 4], x[(i + 2) % 4], x[(i + 3) % 4]); i++;如果仍然无解,将1,3 互换2,4互换。一般会得到正确结果。
这个逻辑不会覆盖所有情况,比如需要需要(x+y)*(z+t)这种算式。
代码
#include <iostream> #include <string> using namespace std; bool f = false; string s = ""; void s2(int g, int x, int y) { if (x + y == g) { s = to_string(x) + '+' + to_string(y); f = true; return; } if (x - y == g) { s = to_string(x) + '-' + to_string(y); f = true; return; } if (y - x== g) { s = to_string(y) + '-' + to_string(x); f = true; return; } if (y* x == g) { s = to_string(y)+ '*' + to_string(x); f = true; return; } if (y/x == g&&y%x==0) { s = to_string(y) + '/'+ to_string(x); f = true; return; } if (x / y == g && x % y == 0) { s = to_string(x) + '/' + to_string(y); f = true; return; } } void s3(int g, int x, int y, int z) { s2(g - x, y, z); if (f) { s = to_string(x) + '+' + s; return; } s2(x - g, y, z); if (f) { s = to_string(x) + "-(" + s+')'; return; } s2(g + x, y, z); if (f) { s =s+'-'+ to_string(x) ; return; } s2(g* x, y, z); if (f) { s ='('+ s + ")/" + to_string(x); return; } if (g % x == 0) { s2(g / x, y, z); if (f) { s = to_string(x) + "*(" + s + ")"; return; } } if (x % g == 0) { s2(x / g, y, z); if (f) { s = to_string(x) + "/(" + s + ")"; return; } } } int main(int argc,char* argv[]) { int x[4]; s = ""; f = false; // std::cin >> x[0] >> x[1] >> x[2] >> x[3]; x[0]= stoi(argv[1]); x[1] = stoi(argv[2]); x[2] = stoi(argv[3]); x[3] = stoi(argv[4]); for (int j = 0; j < 2; j++)// 原顺序无解时 1 3换位置,再无解2,4换位置 { int i = 0; while (i < 4) //原顺序无解是,依次循环 { s3(24 - x[i], x[(i + 1) % 4], x[(i + 2) % 4], x[(i + 3) % 4]); if (f) { s = to_string(x[i]) + '+' + s; cout << s << "\r\n"; break; } s3(24 + x[i], x[(i + 1) % 4], x[(i + 2) % 4], x[(i + 3) % 4]); if (f) { s = s + "-" + to_string(x[i]); cout << s << "\r\n"; break; } s3(24 * x[i], x[(i + 1) % 4], x[(i + 2) % 4], x[(i + 3) % 4]); if (f) { s = s + "/" + to_string(x[i]); cout << s << "\r\n"; break; } if (24 % x[i] == 0) { s3(24 / x[i], x[(i + 1) % 4], x[(i + 2) % 4], x[(i + 3) % 4]); if (f) { s = to_string(x[i]) + "*(" + s + ')'; cout << s << "\r\n"; break; } } i++; } int t = x[j]; if (f) break; else { x[j] = x[j + 2]; x[j + 2] = t; j++; } } if(!f) std::cout << "尽力了\n"; }
这篇关于编程实现24点游戏的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22[开源]10.3K+ Star!轻量强大的开源运维平台,超赞!
- 2024-11-21Flutter基础教程:新手入门指南
- 2024-11-21Flutter跨平台教程:新手入门详解
- 2024-11-21Flutter跨平台教程:新手入门与实践指南
- 2024-11-21Flutter列表组件教程:初学者指南
- 2024-11-21Flutter列表组件教程:新手入门指南
- 2024-11-21Flutter入门教程:初学者必看指南
- 2024-11-21Flutter入门教程:从零开始的Flutter开发指南
- 2024-11-21Flutter升级教程:新手必读的升级指南
- 2024-11-21Flutter升级教程:轻松掌握Flutter版本更新