C++实现24点游戏(创意无限)
最编程
2024-02-04 15:11:40
...
#include<iostream>
using namespace std;
#include<vector>
#include<sstream>
#define num 4
#include<unordered_set>
vector<double> source(num);
vector<string>path;
//vector<vector<string>>res;
vector<bool> used(num + 3, false);
static int counter = 1;
void calcurate24(int n) {
if (path.size() == 3) {
if (abs(source.back() - 24) < 0.0000001) {
cout << "way" << counter++ << ":" << endl;
for (int i = 0; i < 3; i++)
cout << path[i] << endl;
}
return;
}
unordered_set<int> inum;
for (int i = 0; i < source.size() - 1; i++) {
if (used[i] || inum.count(source[i])) continue;
unordered_set<int> jnum;
for (int j = i + 1; j < source.size(); j++) {
if (used[j] || jnum.count(source[j])) continue;
inum.insert(source[i]);
jnum.insert(source[j]);
double a = source[i], b = source[j];
used[i] = true;
used[j] = true;
///
if (b != 1 && b != 0 /*&& 1.0 * a / b == a / b*/) {
source.push_back(1.0 * a / b);
ostringstream ost6;
ost6 << a << '/' << b;
path.push_back(ost6.str());
calcurate24(n - 1);
path.pop_back();
source.pop_back();
}
if (a != 1 && a != 0 /*&& 1.0 * b / a == b / a*/) {
source.push_back(1.0 * b / a);
ostringstream ost5;
ost5 << b << '/' << a;
path.push_back(ost5.str());
calcurate24(n - 1);
path.pop_back();
source.pop_back();
}
//-
source.push_back(a - b);
ostringstream ost2;
ost2 << a << '-' << b;
path.push_back(ost2.str());
calcurate24(n - 1);
path.pop_back();
source.pop_back();
source.push_back(b - a);
ostringstream ost3;
ost3 << b << '-' << a;
path.push_back(ost3.str());
calcurate24(n - 1);
path.pop_back();
source.pop_back();
//+
source.push_back(a + b);
ostringstream ost1;
ost1 << a << '+' << b;
path.push_back(ost1.str());
calcurate24(n - 1);
path.pop_back();
source.pop_back();
//*
source.push_back(b * a);
ostringstream ost4;
ost4 << a << '*' << b;
path.push_back(ost4.str());
calcurate24(n - 1);
path.pop_back();
source.pop_back();
used[i] = false;
used[j] = false;
}
}
}
int main() {
while (true) {
cout << "请输入4个整数数字:" << endl;
path.clear();
for (int j = 0; j < used.size(); j++) {
used[j] = false;
}
for (int i = 0; i < num; i++) {
cin >> source[i];
}
counter = 1;
calcurate24(4);
if (counter == 1)cout << "no way" << endl;
system("pause");
system("cls");
}
return 0;
}
上一篇: 全面掌握信息学奥赛:计算(calc) 中的栈知识点
下一篇: 如何编写一个计算24点的程序?