2011-10-29 06:51:11Morris

a271. 彩色蘿蔔

a271. 彩色蘿蔔

內容 :

在一個神奇的國度裡,有一種兔子,它只吃蘿 蔔,且每天只吃一個,蘿蔔有四種顏色,分別為:紅蘿蔔,白蘿蔔,黃蘿蔔,發霉的蘿蔔(黑色),兔子吃了蘿蔔之後,體重會有不同的變化,紅蘿蔔吃了胖xg, 白蘿蔔吃了胖yg,黃蘿蔔吃了瘦zg(醃黃蘿蔔真難吃...),發霉的蘿蔔吃了瘦wg(附加狀態:中毒...),現在給你x,y,z,w問你幾天後,兔子 的體重!

p.s.中毒會使兔子每天瘦ng(中毒當天不算),且中毒狀態可累加,m是兔子初始的體重。早上先中毒,晚上才吃東西

(新手出題,如有誤,請提醒)

上面的敘述很重要,要仔細看!

輸入說明 :

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

輸出說明 :

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

範例輸入 :

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

範例輸出 :

1g
bye~Rabbit
bye~Rabbit
bye~Rabbit

提示 :

背景知識: stringstream+string+getline

兔子!你咬什麼數入一行!
翻譯:你要怎麼輸入一行?(Sorry!梗被兔子吃了..)

小提示:

/*這是一個用來把每行的數字加起來的程式*/
/*請自行更改<>大小寫*/
#include<iostream>
#include<sstream>//字串串流用標頭檔
using namespace std;
int main(){
 stringstream stream;//建立一個字串串流
 string s;//建立一個字串
 while(getline(cin,s)){//輸入一行
  stream.clear();//清空字串串流
  stream<<ss
  int a,b=0;//建立變數
  while(stream>>a){//輸入這行中的變數
   b+=a;//把b加上a
   }
  cout<<b<<endl;}
 return 0;
 }
//第二筆測資大得不得了...請小心...(有十萬筆)

出處 :

兔子 (管理:qazwsxedcrfvtg14)



作法 : 純模擬

/**********************************************************************************/
/*  Problem: a271 "彩色蘿蔔" from 兔子                                      */
/*  Language: C (684 Bytes)                                                       */
/*  Result: AC(74ms, 316KB) judge by this@ZeroJudge                               */
/*  Author: morris1028 at 2011-10-28 09:07:00                                     */
/**********************************************************************************/


#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", &x, &y, &z, &w, &n, &m);
        gets(s), gets(s);        
        int poison = 0, tmp;
        int i, flag = 0;
        if(m <= 0)    flag = 1;
        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;
                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;
            }
        }
        if(flag)    puts("bye~Rabbit");
        else        printf("%dg\n", m);
    }
    return 0;
}

訪客 2021-06-23 12:26:11

請問為甚麼要加if(s[i] >= '0' && s[i] <= '9')這一條?