AlenaNuna

导航

HJ89 24点运算

题面:https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d?tpId=37&tqId=21312&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

给四张牌,判断能不能算24点。

先把牌转换成对应数值,存在结构体内。存在大小王则直接ERROR。

因为牌的顺序可以变换。就四重循环枚举所有排列,对于每种排列Dfs判断能否得出24点。id数组用于存储每种排列对应的编号。

如果可以就弹出,并输出结构体中的结果。

若不存在答案,输出NONE。

注意运算顺序强制控制为从左到右。我一开始没看到这个条件,以为还有优先级,都不太会写…强制抹去优先级后就容易多了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char fuhao[5];
 4 int id[10];
 5 bool book[10];
 6 struct Pai{
 7     int num;
 8     char s[10];
 9 }pai[5];
10 void init(){
11     for(int i=1;i<=4;i++)
12         scanf("%s",pai[i].s);
13     for(int i=1;i<=4;i++){
14         int len=strlen(pai[i].s);
15         char c=pai[i].s[0];
16         if(len==1){
17             if(c>='2'&&c<='9')pai[i].num=c-'2'+2;
18             else if(c=='J') pai[i].num=11;
19             else if(c=='Q') pai[i].num=12;
20             else if(c=='K') pai[i].num=13;
21             else if(c=='A') pai[i].num=1;
22         }
23         if(len==2) pai[i].num=10;
24         if(len==5){
25             puts("ERROR");
26             exit(0);
27         }
28     }
29     return;
30 }
31 void Output(){
32     printf("%s",pai[id[1]].s);
33     for(int i=2;i<=4;i++){
34         printf("%c",fuhao[i]);
35         printf("%s",pai[id[i]].s);
36     }
37     exit(0);
38     return;
39 }
40 void Dfs(int top,int nowsum){
41     if(top>4){
42         if(nowsum==24){
43             Output();
44             return;
45         }
46         return;
47     }
48     fuhao[top]='+';
49     Dfs(top+1,nowsum+pai[id[top]].num);
50     fuhao[top]='-';
51     Dfs(top+1,nowsum-pai[id[top]].num);
52     fuhao[top]='*';
53     Dfs(top+1,nowsum*pai[id[top]].num);
54     fuhao[top]='/';
55     Dfs(top+1,nowsum/pai[id[top]].num);
56     return;
57 }
58 int main(){
59     init();
60     for(int i=1;i<=4;i++)book[i]=1;
61     for(int i=1;i<=4;i++){
62         book[i]=0;
63         for(int j=1;j<=4;j++){
64             if(book[j]){
65                 book[j]=0;
66                 for(int m=1;m<=4;m++){
67                     if(book[m]){
68                         book[m]=0;
69                         for(int n=1;n<=4;n++){
70                             if(book[n]){
71                                 id[1]=i;
72                                 id[2]=j;
73                                 id[3]=m;
74                                 id[4]=n;
75                                 Dfs(2,pai[id[1]].num);
76                             }
77                         }
78                         book[m]=1;
79                     }
80                 }
81                 book[j]=1;
82             }
83         }
84         book[i]=1;
85     }
86     puts("NONE");
87     return 0;
88 }

 

posted on 2024-09-03 22:14  AlenaNuna  阅读(14)  评论(0编辑  收藏  举报