HJ67. 24点游戏算法
描述
输入描述
读入4个[1,10]的整数,数字允许重复,测试用例保证无异常数字。
输出描述
对于每组案例,输出一行表示能否得到24点,能输出true,不能输出false
示例1
输入:
7 2 1 10
输出:
true
C 解法, 执行用时: 1ms, 内存消耗: 328KB, 提交时间: 2021-09-12
#include <stdio.h> #include <stdbool.h> int flag = 0; bool is24cal(double sum,double* pnum,int size) { double cnn[4] = {0}; if(flag == 1) return true; if(size == 3) { if(sum == 24) { flag = 1; } return true; } size++; for(int i =0;i<=4-size;i++) { for(int j= 0;j<=4-size;j++) { if(i != j) { int count = 1; for(int z= 0 ;z<=4-size;z++) { if(z!=i && z != j) { cnn[count++] = pnum[z]; } } cnn[0] = pnum[i] + pnum[j]; is24cal(cnn[0],cnn,size); cnn[0] = pnum[i] - pnum[j]; is24cal(cnn[0],cnn,size); cnn[0] = pnum[i] * pnum[j]; is24cal(cnn[0],cnn,size); cnn[0] = pnum[i] / pnum[j]; is24cal(cnn[0],cnn,size); } } } return true; } int main() { double num[5]; while(scanf("%lf %lf %lf %lf",&num[0],&num[1],&num[2],&num[3]) != EOF) { is24cal(0,num,0); if(flag == 1) { printf("true\n"); } else { printf("false\n"); } flag = 0; } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 340KB, 提交时间: 2020-11-13
#include <stdio.h> #include <string.h> int inp[4]={0}; int flag[4]={0}; int dfs(int num) { if(num==24) return 1; for(int i=0;i<4;i++) { if(flag[i]==0) { flag[i]=1; if(dfs(num+inp[i])) return 1; else if(dfs(num-inp[i])) return 1; else if(dfs(num*inp[i])) return 1; else if(dfs(num/inp[i]) && (num%inp[i]==0)) return 1; flag[i]=0; } } return 0; } int main() { while(scanf("%d %d %d %d",&inp[0],&inp[1],&inp[2],&inp[3])!=EOF) { memset(flag,0,sizeof(flag)); if(dfs(0)) printf("true\n"); else printf("false\n"); } return 0; }