大佬教程收集整理的这篇文章主要介绍了华为机试题 24点运算,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
使用回溯 + 暴力@H_489_3@
#include <iostream>
#include <String>
#include <map>
#include <vector>
using namespace std;
bool flag = false;
char v[4]={'+', '-', '*', '/'};
String mm[14] = {"0", "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
int calc(char x, int a, int b){
switch(X){
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return b == 0 ? 1111111 : a/b;
}
}
bool check(vector<int> &path){
for(int j=0; j<4; j++){
int ee = calc(v[j], path[0], path[1]);
if(ee == 1111111) conTinue;
for(int k=0; k<4; k++) {
int ff = calc(v[k], ee, path[2]);
if(ff == 1111111) conTinue;
for(int l=0; l<4; l++){
int gg = calc(v[l], ff, path[3]);
if(gg == 1111111) conTinue;
if(gg == 24) {
cout << mm[path[0]] << v[j] << mm[path[1]] << v[k] << mm[path[2]] << v[l] <<
mm[path[3]] << endl;
return true;
}
}
}
}
return false;
}
void dfs(vector<int> &v, map<int, bool> &vis, vector<int> &path){
if(path.size() == v.size()) {
flag = check(path);
return;
}
for(int i=0; i<4; i++){
if(flag) {
return;
}
if(vis[i] == falsE) {
vis[i] = true;
path.push_BACk(v[i]);
dfs(v, vis, path);
if(flag) {
return;
}
path.pop_BACk();
vis[i] = false;
}
}
}
int main() {
String a, b, c, d;
map<String, int> m;
m["2"] = 2;
m["3"] = 3;
m["4"] = 4;
m["5"] = 5;
m["6"] = 6;
m["7"] = 7;
m["8"] = 8;
m["9"] = 9;
m["10"] = 10;
m["A"] = 1;
m["J"] = 11;
m["Q"] = 12;
m["K"] = 13;
int aa, bb, cc, dd;
while(cin >> a >> b >> c >> d) {
if(a == "joker" || b == "joker" || c == "joker" || d=="joker") {
cout << "ERRORn";
conTinue;
}
vector<int> vv(4);
vv[0] = m[a];
vv[1] = m[b];
vv[2] = m[c];
vv[3] = m[d];
map<int, bool> vis;
vector<int> path;
dfs(vv, vis, path);
if(!flag) cout << "NONEn";
}
}
以上是大佬教程为你收集整理的华为机试题 24点运算全部内容,希望文章能够帮你解决华为机试题 24点运算所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。