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;
}