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

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

!算 24 (dfs)

2019-11-11 07:02:10
字體:
來源:轉載
供稿:網友

總時間限制: 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))
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 娱乐| 郸城县| 沙雅县| 津市市| 安义县| 连山| 富民县| 南江县| 乌兰县| 定兴县| 广东省| 星座| 南靖县| 山丹县| 万宁市| 乐至县| 合山市| 逊克县| 安达市| 赤水市| 富宁县| 历史| 呼图壁县| 利津县| 定安县| 邵武市| 朝阳区| 安化县| 志丹县| 盘山县| 洪湖市| 突泉县| 乐清市| 衡南县| 兴业县| 奉新县| 东阳市| 衡阳市| 沙雅县| 北辰区| 五原县|