2011-08-17 10:49:00Morris

d956. G. 失落的維京戰機

d956. G. 失落的維京戰機

內容 :

  在這個神族和蟲族勢力強盛,人們又遭昏君統治,一步一步走向敗亡的時代。身為碩果僅存的雷諾突擊隊最高首領,吉姆雷諾,肩負著延續人類文明的使命與外星種族對抗,戰無不勝。但他最近發現,在永無止盡的帶兵作戰之中,偶爾還是需要抽點空,好好地放鬆一下。

  自從心愛的愛人離開後,吉姆最喜歡的娛樂莫過於艦上酒吧的那台遊樂機「失落的維京戰機」。這是個很普通的射擊遊戲,擊落敵人或是取得物品等等都可以為自己加分。幾天前,吉姆雷 諾發現原本由他占領的的最高分排行榜竟然都被某個叫做托許的傢伙佔據了。這件事令他火冒三丈,吉姆當下決定不把托許的紀錄擠掉誓不甘休,展開了一段廢寢忘 食的戰鬥。倒楣的是,這台機器不知道又被哪個喜歡空間躍傳的傢伙搞得,本來會把分數直接算好給使用者看,現在只會把算式列出來而不會顯示計算後的分數。這 問題令吉姆雷諾頭痛不已,他決定叫艦上的科學家斯特曼寫個程式幫他計算分數,好讓他確定新打的分數是否勝過托許。

輸入說明 :

第一行包含一個數字 T ,代表以下有幾組測試資料。

  每組測試資料都只有一行算式,算式之中沒有空白字元並且只會有 ‘0’ ‘9’ 以及‘+’‘*’這些字元。算式的長度不會超過 100 個字元。另外,在算式中每一個數字都只有一個位數,也就是只有 0 9,十種數字,會出現在算式裡面。

  儘管數學等基礎科學在這先進的年代已經為大多數人們忽略,但分數的計算方法還是保留了古老的二十一世紀時的計算方式,先乘除後加減

輸出說明 :

對於每一行算式,輸出一個數字代表算式的答案,你可以確定這個數字會小於231 -1

範例輸入 :

3
1+2
1+2*2+3
3

範例輸出 :

3
8
3

提示 :

出處 :

2010 NPSC 國中組決賽 (管理:pcshic)



作法 : 模擬
只有 +*, 沒有括弧, 用一個 Queue 實作就可以了

/**********************************************************************************/
/*  Problem: d956 "G. 失落的維京戰機" from 2010 NPSC 國中組決賽       */
/*  Language: C                                                                   */
/*  Result: AC (0ms, 224KB) on ZeroJudge                                          */
/*  Author: morris1028 at 2011-08-17 10:43:26                                     */
/**********************************************************************************/


#include<stdio.h>
main() {
    int t, a, b, c, d;
    char s[101];
    scanf("%d", &t), getchar();
    while(t--) {
        gets(s);
        int Queue[101], Qt = 0, Ans = 0;
        Queue[Qt++] = s[0]-'0';
        for(a = 1; s[a]; a++) {
            switch(s[a]) {
                case '+':Queue[Qt++] = s[a+1]-'0', a++;break;
                case '*':Queue[Qt-1] *= (s[a+1]-'0'), a++;break;
            }
        }
        for(a = 0, Ans = 0; a < Qt; a++)    Ans += Queue[a];
        printf("%d\n", Ans);
    }
    return 0;
}