愚人節的禮物 (思維題)
阿新 • • 發佈:2018-12-21
題目描述:
四月一日快到了,Vayko想了個愚人的好辦法——送禮物。嘿嘿,不要想的太好,這禮物可沒那麼簡單,Vayko為了愚人,準備了一堆盒子,其中有一個盒子裡面裝了禮物。盒子裡面可以再放零個或者多個盒子。假設放禮物的盒子裡不再放其他盒子。 用()表示一個盒子,B表示禮物,Vayko想讓你幫她算出愚人指數,即最少需要拆多少個盒子才能拿到禮物。
Input
本題目包含多組測試,請處理到檔案結束。 每組測試包含一個長度不大於1000,只包含'(',')'和'B'三種字元的字串,代表Vayko設計的禮物透檢視。 你可以假設,每個透檢視畫的都是合法的。
Output
對於每組測試,請在一行裡面輸出愚人指數。
Sample Input
((((B)()))())
(B)
Sample Output
4
1
程式碼:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> const int maxn =10010; using namespace std; int main() { char c[1000]; while(scanf("%s",c)!=EOF) { int sum=0; int len=sizeof(c); for(int i=0;i<len;i++) { if(c[i]=='(')//遇到 '(' 先加1再說 sum++; else if(c[i]==')')如果這裡湊成了一個完整的括號就減1 { sum--; //continue; } else if(c[i]!='('&&c[i]!=')')//不是左括號又不是右括弧,就是禮物了 { // sum++; break;//遇到禮物就跳出,不需要再找了 } // else sum++; } printf("%d\n",sum); } return 0; } /* 上方的這幾者是並列情況,不是自己剛開始想的i與i+1,僅用這種情況找()太侷限,(()),這種情況就無法判斷 */
自己剛做時,把題目想的太簡單,認為只要從左方尋找有幾個 '(' 就行,但是在真的禮物之前可能會有真正的空盒子。
例如:(((()(B)))) 這種情況正確的結果是4,若按這種思路結果會是5.