国产探花免费观看_亚洲丰满少妇自慰呻吟_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))
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 固始县| 汉源县| 浦东新区| 涪陵区| 宣武区| 尤溪县| 新乡县| 桦南县| 区。| 峨眉山市| 安国市| 张家港市| 九龙坡区| 胶南市| 安庆市| 龙岩市| 金昌市| 五峰| 河南省| 增城市| 乌兰县| 宁明县| 政和县| 竹溪县| 镶黄旗| 洛隆县| 景德镇市| 信宜市| 昆明市| 兴海县| 黔西县| 南郑县| 宜川县| 乃东县| 海丰县| 尚义县| 湘潭县| 中西区| 阿荣旗| 天门市| 双流县|