愚人節的禮物

Problem Description

四月一日快到了,Vayko想了個愚人的好辦法——送禮物。嘿嘿,不要想的太好,這禮物可沒那麼簡單,Vayko爲了愚人,準備了一堆盒子,其中有一個盒子裏面裝了禮物。盒子裏面可以再放零個或者多個盒子。假設放禮物的盒子裏不再放其他盒子。

用()表示一個盒子,B表示禮物,Vayko想讓你幫她算出愚人指數,即最少需要拆多少個盒子才能拿到禮物。

Input

本題目包含多組測試,請處理到文件結束。
每組測試包含一個長度不大於1000,只包含'(',')'和'B'三種字符的字符串,代表Vayko設計的禮物透視圖。
你可以假設,每個透視圖畫的都是合法的。

Output

對於每組測試,請在一行裏面輸出愚人指數。

Sample Input

((((B)()))())
(B)

Sample Output

4
1



<<<源代碼>>>
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;

int main(){
	char str[1000];
	stack<char>s;
	while(scanf("%s",str)==1){
		int len=strlen(str);
		for(int i=0;i<len;i++){
			if(str[i]=='(') s.push(str[i]);
			if(str[i]==')'&&s.top()=='(') s.pop();
			if(str[i]=='B') {
				printf("%d\n",s.size());
				break;
			}
		}
		while(!s.empty())
		 s.pop();
	}
}

1.需要輸入一串數據(字符串)時,可以用字符串數組來存放它們。
  #include<string.h>  char str[100];scanf("%s",str);
  str[i] i同時可作爲輸入字符的計數器
         用strlen(str)來表示輸入字符個數
2.關於字符串
  1>.字符串變量的聲明與初始化
    C語言允許以下兩種方式初始化:(不能把初始化從聲明中分隔出來)
    char city[9]="New York"; char city[9]={'N','e','w',' ','Y','o','r','k'};
  2>.使用scanf函數從終端讀取字符串
    一般格式爲:char str[size];
                scanf("%s",str);
    這種讀取方法的問題是,一旦遇到空白符(包括空格、製表格、回車符、樣式縮進和換行符),就停止輸入。
    所以如果在終端輸入如下的文本行:NEW YORK,則只有字符串NEW讀入數組str中。
    如果要讀取整行的字符"NEW YORK",就要使用兩個大小適合的字符數組。
    如:char in[10],out[10];
        scanf("%s%s",in,out);
        printf("%s %s\n",in,out);
  3>.字符串處理函數(puts,gets,strcat,strcpy and strncpy,strcmp,strlen,strlwr,strupr)
    ①puts函數
     一般形式爲:puts(字符數組)
     作用是:將一個字符串(以'\0'結束的字符序列),輸出到終端。
     如:char str[]={"I Love China\n"};
         puts(str);
    ②gets函數
     一般形式爲:gets(字符數組)
     作用是:從終端輸入一個字符串到字符數組,並且得到一個函數值。該函數值是字符數組的起始地址。
     如:char str[100];
         puts(str);
        輸入I Love China 輸出I Love China
     △注意用puts和gets函數只能輸出或輸入一個字符串,不能寫成puts(str1,str2)或gets(str1,str2)
    #include<string.h>
    ③strcat函數
     一般形式爲:strcat(字符數組1,字符數組2)
     作用是:連接兩個字符數組中的字符串,把字符串2連接到字符串1的後面,
             結果放在字符數組1中,函數調用後得到一個函數值,即字符數組1的地址。
             連接前兩個字符串的後面都有'\0',連接時將字符串後面的'\0'取消,只在新串後保留'\0'。
     如:char str1[]={"What I got to do to make you love me. "};
         char str2[]={"Sorry seems to be the hardest word"};
         printf("%s",strcat(str1,str2));
        輸出What I got to do to make you love me.Sorry seems to be the hardest word
    ④strcmp函數
     一般形式爲:strcmp(字符串1,字符串2)
     作用是:比較字符串1和字符串2。
    ⑤strlen函數
     一般形式爲:strlen(字符數組)
     作用是:測試字符串長度的函數。函數的值爲字符串中的實際長度,不包括'\0'。
     如:char str[10]={"China"};
         printf("%d",strlen(str));
        輸出的結果不是10,也不是6,而是5
    ⑥strlwr函數和strupr函數
     一般形式爲:strlwr(字符串);
     作用是:將字符串中的大寫字母轉換成小寫字母。
             strupr函數與strlwr函數正好相反,它是把字符串中的小寫字母轉換成大寫字母。
3.做這道題只是簡單的運用一下,<stack>函數
  解題思想:利用棧除去其中的空盒子,剩下的就是從最外層直接到禮物的層數。
  1.當讀到左括號時,入棧;標記該盒子非空;
  2.當讀到右括號時,判斷棧頂元素是不是左括號,如果是說明這是一個空盒,棧頂元素彈出;
  3.當讀到"B"時,統計棧中左括號的個數,即可得到答案;並結束整個循環。
  4.清空棧中括號,以便下次輸入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章