a271

輸入說明 :

第一行是測資的筆數,每筆測資第一行是x,y,z,w,n,m,第二行是一串數字,1代表紅蘿蔔,2代表白蘿蔔,3代表黃蘿蔔,4代表黑蘿蔔,0代表沒吃。這一行中的數字為兔子這段時間內所吃的食物。

輸出說明 :

請輸出兔子在那段時間後所剩的體重,如果體重有在任意時刻少於等於0請輸出:"bye~Rabbit"(不含引號),不然請印出結束時的體重。(詳情參照範例輸入輸出)

有可能問你第一天的體重歐!(就是問初始體重,也就是那行根本沒輸入) 例如如: 13 312 43 432 567 //空一行

輸出為:567

這題主要參考Morris大這篇

重點在於

scanf("%d %d %d %d %d %d%*c", &x, &y, &z, &w, &n, &m);

後面要加上%*c不然下一行的gets(),會吃到'\n'

還有就是要多設一個poison的變數,來看總共吃了幾次發霉的蘿蔔,中毒的狀態要累加

假如在白天中毒後已經死了,就不用做了

或者晚上吃完蘿蔔後,死掉,就直接退出迴圈

#include<stdio.h>
int main() {
    int T, x, y, z, w, n, m;
    char s[10000];
    scanf("%d", &T);
    while(T--) 
    {
        scanf("%d %d %d %d %d %d%*c", &x, &y, &z, &w, &n, &m);
        gets(s);        
        int poison = 0, tmp;
        int i;
        int flag = 0;
        for(i = 0; s[i] && flag == 0; i++)
        {
          if(s[i] >= '0' && s[i] <= '9') 
          {
                tmp = s[i]-'0';
                m += poison;

                if(m <= 0)    
                {
                    flag = 1;
                    break;
                }

                switch(tmp) 
                {
                    case 0:
                        break;
                    case 1:
                        m+=x;
                        break;
                    case 2:m+=y;
                        break;
                    case 3:
                        m += -z;
                        break;
                    case 4:
                        m += -w, 
                        poison -= n;
                        break;
                }
                if(m <= 0)  
                {
                    flag = 1;
                    break;
                }      
            }
        }
        if(flag)    
            puts("bye~Rabbit");
        else        
            printf("%dg\n", m);
    }
    return 0;
}