內容
在一個神奇的國度裡,有一種兔子,它只吃蘿蔔,且每天只吃一個,蘿蔔有四種顏色,分別為:紅蘿蔔,白蘿蔔,黃蘿蔔,發霉的蘿蔔(黑色),兔子吃了蘿蔔之後,體重會有不同的變化,紅蘿蔔吃了胖 xg,白蘿蔔吃了胖 yg,黃蘿蔔吃了瘦 zg(醃黃蘿蔔真難吃…),發霉的蘿蔔吃了瘦 wg(附加狀態:中毒…),現在給你 x,y,z,w 問你幾天後,兔子的體重!
p.s.中毒會使兔子每天瘦 ng(中毒當天不算),且中毒狀態可累加,m 是兔子初始的體重。早上先中毒,晚上才吃東西。
上面的敘述很重要,要仔細看!
輸入
第一行是測資的筆數,每筆測資第一行是 x,y,z,w,n,m,第二行是一串數字,1 代表紅蘿蔔,2 代表白蘿蔔,3 代表黃蘿蔔,4 代表黑蘿蔔,0 代表沒吃。這一行中的數字為兔子這段時間內所吃的食物。
4
5 3 2 4 3 10
1 1 2 3 3 3 3 4 3 3
5 3 2 4 3 10
1 1 2 3 3 3 3 4 3 3 2 2 2 2 2 2 2
5 3 2 4 3 10
4 1 3 3 1 1 2 2 1 1 3 1 1 1 1 4
10 3 2 2 1 5
1 4 4 0 0 4 1 2 2 2 0 0 2 2 0
輸出
請輸出兔子在那段時間後所剩的體重,如果體重有在任意時刻少於等於 0 請輸出:”bye~Rabbit”(不含引號),不然請印出結束時的體重。(詳情參照範例輸入輸出)
有可能問你第一天的體重歐!(就是問初始體重,也就是那行根本沒輸入)
例如如:
13 312 43 432 567
//空一行
輸出為:567
1g
bye~Rabbit
bye~Rabbit
bye~Rabbit
解題思路
完整程式碼
簡單的流程控制和字串處理。
AC (51ms, 108KB)
#include <stdio.h>
int kase, x, y, z, w, n, m, nt, r; char buffer[1000], * curr;
inline char* sgetInt(char* src, int* dst) { *dst = 0; int i = 0, getNum = 0; for (; src[i]; i++) { if (src[i] >= '0' && src[i] <= '9') * dst = (*dst << 3) + (*dst << 1) + (src[i] - '0'), getNum = 1; else if (getNum) return src + i + 1; } return getNum ? src + i : NULL; }
int main() { scanf("%d", &kase); getchar(); while (kase--) { gets(buffer), curr = buffer; curr = sgetInt(curr, &x), curr = sgetInt(curr, &y), curr = sgetInt(curr, &z); curr = sgetInt(curr, &w), curr = sgetInt(curr, &n), curr = sgetInt(curr, &m); gets(buffer), curr = buffer, nt = 0; while ((curr = sgetInt(curr, &r)) != NULL) { if ((m -= nt) <= 0) break; switch (r) { case 1: m += x; break; case 2: m += y; break; case 3: m -= z; break; case 4: m -= w, nt += n; break; default: break; } } m > 0 ? printf("%dg\n", m) : puts("bye~Rabbit"); } return 0; }
|