P1236 算24点

题目链接

 1 #include <bits/stdc++.h>
 2 # define LL long long
 3 using namespace std;
 4
 5 bool dfs(vector<int> &num, vector<string> &res){
 6     if(num.size()==1) {
 7         if(num[0]==24) return true;
 8         return false;
 9     }
10
11     string tmp;
12     vector<int> nexted;
13     for(int i=0;i<num.size()-1;++i){
14
15         for(int j=i+1;j<num.size();++j){
16             int a=num[i];
17             int b=num[j];
18
19             if(a<b) swap(a,b);
20
21             nexted.clear();
22             for(int k=0;k<num.size();++k){
23                 if(k==i || k==j) continue;
24                 nexted.push_back(num[k]);
25             }
26             nexted.push_back(a+b);
27             tmp=to_string(a)+"+"+to_string(b)+"="+to_string(a+b);
28             res.push_back(tmp);
29             if(dfs(nexted,res)) return true;
30             res.pop_back();
31
32             nexted.clear();
33             for(int k=0;k<num.size();++k){
34                 if(k==i || k==j) continue;
35                 nexted.push_back(num[k]);
36             }
37             nexted.push_back(a-b);
38
39             tmp=to_string(a)+"-"+to_string(b)+"="+to_string(a-b);
40             res.push_back(tmp);
41             if(dfs(nexted,res)) return true;
42             res.pop_back();
43
44             nexted.clear();
45             vector<int> tmpv;
46             for(int k=0;k<num.size();++k){
47                 if(k==i || k==j) continue;
48                 nexted.push_back(num[k]);
49             }
50             nexted.push_back(a*b);
51             tmp=to_string(a)+"*"+to_string(b)+"="+to_string(a*b);
52             res.push_back(tmp);
53             if(dfs(nexted,res)) return true;
54             res.pop_back();
55
56             if(b!=0 &&  a%b==0){
57                 nexted.clear();
58                 for(int k=0;k<num.size();++k){
59                     if(k==i || k==j) continue;
60                     nexted.push_back(num[k]);
61                 }
62                 nexted.push_back(a/b);
63                 tmp=to_string(a)+"/"+to_string(b)+"="+to_string(a/b);
64                 res.push_back(tmp);
65                 if(dfs(nexted,res)) return true;
66                 res.pop_back();
67             }
68         }
69     }
70     return false;
71 }
72
73 int main(){
74     vector<int> num(4,0);
75     for(int i=0;i<4;++i){
76         int t;
77         scanf("%d", &t);
78         num[i]=t;
79     }
80     vector<string> res;
81     bool r=dfs(num,res);
82     if(!r){
83         printf("No answer!\n");
84         return 0;
85     }
86     for(auto &s:res){
87         cout<<s<<"\n";
88     }
89     return 0;
90 }

原文地址:https://www.cnblogs.com/FEIIEF/p/12253653.html

时间: 2024-10-09 23:29:37

P1236 算24点的相关文章

洛谷P1236 算24点

题目描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”.您作为游戏者将得到4个1~9之间的自然数作为操作数,而您的任务是对这4个操作数进行适当的算术运算,要求运算结果等于24. 您可以使用的运算只有:+,-,*,/,您还可以使用()来改变运算顺序.注意:所有的中间结果须是整数,所以一些除法运算是不允许的(例如,(2*2)/4是合法的,2*(2/4)是不合法的).下面我们给出一个游戏的具体例子: 若给出的4个操作数是:1.2.3.7,则一种可能的解答是

【dfs套dfs套dfs】算24点

Luogu P1236 算24点 值得纪念一下 1 #include<cstdio> 2 #include<iostream> 3 #define ri register int 4 #define ll long long 5 using namespace std; 6 int a, b, c, d; 7 int ans[20]; 8 char s[5]; 9 bool flag = 0; 10 bool dfs3(int x, int y) { 11 if(x < y)

【DFS】算24点

[tyvj2802/RQNOJ74]算24点 描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”.您作为游戏者将得到4个1~9之间的自然数作为操作数,而您的任务是对这4个操作数进行适当的算术运算,要求运算结果等于24.  您可以使用的运算只有:+,-,*,/,您还可以使用()来改变运算顺序.注意:所有的中间结果须是整数,所以一些除法运算是不允许的(例如,(2*2)/4是合法的,2*(2/4)是不合法的).下面我们给出一个游戏的具体例子:  若给出的4

hdu1427 速算24点

</pre><pre> //#pragma comment(linker, "/STACK:102400000,102400000") //HEAD #include <cstdio> #include <cstring> #include <vector> #include <iostream> #include <algorithm> #include <queue> #include

Problem A: 速算24点

Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括 A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用'+','-','*','/'运算符以及括号改变运算 顺序,使得最终运算结果为24(每张牌必须且仅能用一次).游戏很简单,但遇到无解的情况往往让人很郁闷.你的任务就是针对每一组随机产生的四张牌,判断 是否有解.我们另外规定,整个计算过程中都不能出现小数. Input 输入数据占一行,给定四张牌. Output 如果有解则输出

Hdoj 1427 速算24点 【DFS】

速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3574    Accepted Submission(s): 869 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用'+','-','

速算24点问题

问题: 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用'+','-','*','/'运算符以及括号改变运算顺序,使得最终运算结果为24(每个数必须且仅能用一次).游戏很简单,但遇到无解的情况往往让人很郁闷.你的任务就是针对每一组随机产生的四张牌,判断是否有解.我们另外规定,整个计算过程中都不能出现小数. 回答: #include<iostream>      #include<cstdi

HDU 1427 速算24点【数值型DFS】

速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2562    Accepted Submission(s): 606 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用'+','-','*

爪哇国新游记之二十一----快算24

四张牌,通过四则运算得到24,一个数限用一次,快者为胜. 代码: import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * 快算24 * @author heyang * */ public class Caculator{ private double anticipate;// 预期结果 private double op1;// 操作数一