题解 | #24点运算#
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//DFS暴力枚举
int visit[4]={0},result_index=0,cal_char_index=0;
int result[4]={0};
char cal_char[4]={0};
int dfs(int a[],int sum){
if(sum==24&&cal_char_index==3){
return 1;
}else{
for(int i=0;i<4;i++){
if(!visit[i]){
visit[i]=1;
int flag;
result[result_index++]=a[i];
cal_char[cal_char_index++]='+';
if(dfs(a,sum+a[i])==0){
cal_char[--cal_char_index]='-';
cal_char_index++;
if(dfs(a,sum-a[i])==0){
cal_char[--cal_char_index]='*';
cal_char_index++;
if(dfs(a,sum*a[i])==0){
cal_char[--cal_char_index]='/';
cal_char_index++;
if(dfs(a,sum/a[i])==0){//加减乘除都不行
cal_char[--cal_char_index]='\0';//回溯
visit[i]=0;//回溯
result[--result_index]=0;//回溯
}else return 1;
}else return 1;
}else return 1;
}else return 1;
}
}
return 0;//找了4个都没找到或者全部数字用完
}
}
int main() {
int num[4]={0};
char str[4][6]={0};
scanf("%s %s %s %s",str[0],str[1],str[2],str[3]);
int len;
for(int i=0;i<4;i++){
len=strlen(str[i]);
if(len>2){
printf("ERROR\n");
return 0;
}
else{
if(len==2) num[i]=10;
else{
if(str[i][0]>='2'&&str[i][0]<='9')
num[i]=str[i][0]-'0';
else{
switch (str[i][0]) {
case 'J':num[i]=11;break;
case 'Q':num[i]=12;break;
case 'K':num[i]=13;break;
case 'A':num[i]=1;break;
}
}
}
}
}
//初始化结束,开始深搜
for(int i=0;i<4;i++){
result[0]=num[i];
result_index++;
visit[i]=1;
if(dfs(num, num[i])==0){
result_index--;
result[0]=0;
visit[i]=0;
}else{//找到符合条件的第一个序列,做输出处理
if(result[0]>=2&&result[0]<=9)
printf("%c",result[0]+'0');
else{
switch (result[0]) {
case 1:printf("A");break;
case 10:printf("10");break;
case 11:printf("J");break;
case 12:printf("Q");break;
case 13:printf("K");break;
}
}
for(int i=0;i<3;i++){
printf("%c",cal_char[i]);
if(result[i+1]>=2&&result[i+1]<=9)
printf("%c",result[i+1]+'0');
else{
switch (result[i+1]) {
case 1:printf("A");break;
case 10:printf("10");break;
case 11:printf("J");break;
case 12:printf("Q");break;
case 13:printf("K");break;
}
}
}
return 0;
}
}
//没找到序列
printf("NONE\n");
return 0;
}
查看20道真题和解析
凡岛公司福利 824人发布