程式碼:
#include<stdio.h> int neg; /* neg: 計算中毒次數 */ int x,y,z,w,n,m; /* ...: 所有所需變數 */ int situation(char); /* situation() : 查表 */ int check(int); /* check() : 檢查存活 */ int main() { int N; scanf("%d",&N); char ch; int flag=1; int count=0; while(scanf("%d %d %d %d %d %d",&x,&y,&z,&w,&n,&m)) { count++; flag=1;neg=0; scanf("%c",&ch); while(scanf("%c",&ch)) { if(ch==' ') continue; else if(ch=='\n') break; else if(ch=='0'||ch=='1'||ch=='2'||ch=='3'||ch=='4') { if(neg==0) { m+=situation(ch); flag=check(m); if(flag==0) { break; } } else { m+=neg*n; flag=check(m); if(flag==0) { break; } //////////////////////////////////////////////////// m+=situation(ch); flag=check(m); if(flag==0) { break; } } } } if(flag==1) printf("%dg\n",m); if(count==N) return 0; } } int situation(char X) { switch(X) { case '0': return 0; case '1': return x; case '2': return y; case '3': return -z; case '4': neg--; return -w; default: {;} } } int check(int M) { if(M>0) return 1; else { printf("bye~Rabbit\n"); return 0; } }
程式碼:
flag=check(m); if(flag==0) { break; }
因為你這裡break了,每筆測資第二行還沒輸入完,結果後面的數字變成下一筆測資的x, y, z, n, m
感激不盡!
我先將break的部分刪去之後,
再利用cnt來計數死後測資筆數並以此限制列印bye的次數,就成功AC了,真的太感謝了!
(這是暴力解法,要花0.6秒才AC;但如果有機會能見識更佳的解法,我也願聞其詳,拜託各位大神了)
int check(int M) { if(M>0) return 1; else { cnt++; if(cnt==1) printf("bye~Rabbit\n"); return 0; } }