国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

!算 24 (dfs)

2019-11-11 06:31:28
字體:
來源:轉載
供稿:網友

總時間限制: 3000ms 內存限制: 65536kB 【】描述 給出4個小于10個正整數,你可以使用加減乘除4種運算以及括號把這4個數連接起來得到一個表達式?,F在的問題是,是否存在一種方式使得得到的表達式的結果等于24。

這里加減乘除以及括號的運算結果和運算的優先級跟我們平常的定義一致(這里的除法定義是實數除法)。

比如,對于5,5,5,1,我們知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,對于1,1,4,2,我們怎么都不能得到24。 【】輸入 輸入數據包括多行,每行給出一組測試數據,包括4個小于10個正整數。最后一組測試數據中包括4個0,表示輸入的結束,這組數據不用處理。 【】輸出 對于每一組測試數據,輸出一行,如果可以得到24,輸出“YES”;否則,輸出“NO”。 【】樣例輸入 5 5 5 1 1 1 4 2 0 0 0 0 【】樣例輸出 YES NO

代碼(學自syx大佬)

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#define LL long long#define p 0.00000001using namespace std;double num[5];bool f[5];bool dfs(int k)//計算完的卡號 { if(k==4){ for(int i=1;i<=4;i++) if(!f[i]&&fabs(num[i]-24.0)<p) return true; return false; } for(int i=1;i<=4;i++) if(!f[i]) for(int j=i+1;j<=4;j++) if(!f[j])//未計算過 { double tmp1=num[i],tmp2=num[j]; num[i]=tmp1+tmp2;f[j]=true; if(dfs(k+1)) return true; f[j]=false; num[i]=tmp1*tmp2;f[j]=true; if(dfs(k+1)) return true; f[j]=false; num[i]=tmp1-tmp2;f[j]=true; if(dfs(k+1)) return true; f[j]=false; num[i]=tmp2-tmp1;f[j]=true; if(dfs(k+1)) return true; f[j]=false; num[i]=tmp1/tmp2;f[j]=true; if(dfs(k+1)) return true; f[j]=false; num[i]=tmp2/tmp1;f[j]=true;//減或除以有兩種情況 這是一個坑 if(dfs(k+1)) return true; f[j]=false; num[i]=tmp1;f[j]=false;//回溯 } return false;}int main(){ while(1){ memset(f,false,sizeof(f));//多組數據,每次初始化 scanf("%lf%lf%lf%lf",&num[1],&num[2],&num[3],&num[4]); if(num[1]==0&&num[2]==0&&num[3]==0&&num[4]==0) break; if(dfs(1))
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麦盖提县| 新田县| 通榆县| 修文县| 柞水县| 隆德县| 六盘水市| 桃源县| 镶黄旗| 新化县| 繁昌县| 苍山县| 锡林浩特市| 洪雅县| 无为县| 榆林市| 泌阳县| 南安市| 合川市| 黑河市| 深泽县| 丹棱县| 镇坪县| 河南省| 格尔木市| 定襄县| 仪征市| 陇南市| 盐山县| 平遥县| 阿城市| 溧阳市| 宁城县| 大兴区| 乌鲁木齐市| 普兰县| 西丰县| 景德镇市| 镇平县| 信宜市| 凯里市|