3星難度 算式填符號

2022-05-06 15:39:09 字數 1711 閱讀 6636

題目:

匪警請撥110,即使手機欠費也可撥通!

為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!

某批警察叔叔正在進行智力訓練:

1 2 3 4 5 6 7 8 9 = 110

請看上邊的算式,為了使等式成立,需要在數字間填入加號或者減號(可以不填,但不能填入其它符號)。之間沒有填入符號的數字組合成乙個數,例如:12+34+56+7-8+9 就是一種合格的填法;123+4+5+67-89 是另乙個可能的答案。

請你利用計算機的優勢,幫助警察叔叔快速找到所有答案。

每個答案佔一行。形如:

12+34+56+7-8+9

123+4+5+67-89

答案是10

這題到最後的確做出來了,但是花時間也太長了,乙個多小時吧   打比賽的時候可不能可這樣,感覺對dfs還是不夠熟悉  慢慢積累吧!

思路:  其實就是dfs每兩個數之間的符號,都有三種情況,+ - 另外乙個可以用乙個*來表示。  中間的都一樣的 但是邊界處理要注意!!!

首先是第乙個數  同樣的 + - *三種操作都不能少  總共需要填八個空 所以當知道是第八個空時  第九個空只需要填一次  不然就多算了兩次了 。

中間一些細節真的要注意!  特別是當是-的時候 後面一直是*  這種情情況也要考慮到!!  

下面看**:

#include#include

#include

#include

using

namespace

std;

const

int maxn=1000

;int

a[maxn];

char

s[maxn];

int an=0

;void solve(int cnt,int ans,int sum,char c,bool limit)//

cnt表示第幾位 ans表示到目前為止總和 sum表示當前遍歷的這個數是多少 c表示這個空填什麼 limit -還是+

cout

}return

; }

if(c=='

+')//

這個空是+ 代表前面就已經和後面的斷了

else solve(cnt+1,ans-sum,a[cnt+1],'

*',false

); }

else

else solve(cnt+1,ans+sum,a[cnt+1],'

*',false

); }

//sum+=a[cnt];

}

if(c=='-'

)

else solve(cnt+1,ans-sum,a[cnt+1],'

*',true

); }

else

else solve(cnt+1,ans+sum,a[cnt+1],'

*',true

); }

}if(c=='

*')//

這個箜是* 代表前面的和後面的還沒有斷

else solve(cnt+1,ans,sum*10+a[cnt+1],'+'

,limit);

}}int

main()

算式填符號

問題描述 匪警請撥 110,即使手機欠費也可撥通!為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!某批警察叔叔正在進行智力訓練 1 2 3 4 5 6 7 8 9 110 請看上邊的算式,為了使等式成立,需要在數字間填入加號或者減號 可...

C 算式填符號

題目描述 匪警請撥110,即使手機欠費也可撥通!為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!某批警察叔叔正在進行智力訓練 1 2 0 3 請看上邊的算式,為了使等式成立,需要在數字間填入加號或者減號 上述可能的方案為 1 2 0 3...

藍橋杯 算式填符號

匪警請撥110,即使手機欠費也可撥通!為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!某批警察叔叔正在進行智力訓練 1 2 3 4 5 6 7 8 9 110 請看上邊的算式,為了使等式成立,需要在數字間填入加號或者減號 可以不填,但不...