7-1 抓老鼠啊~虧了還是賺了? (20 分)


7-1 抓老鼠啊~虧了還是賺了? (20 分)

某地老鼠成災,現懸賞抓老鼠,每抓到一只獎勵10元,於是開始跟老鼠斗智斗勇:每天在牆角可選擇以下三個操作:放置一個帶有一塊奶酪的捕鼠夾(T),或者放置一塊奶酪(C),或者什么也不放(X)。捕鼠夾可重復利用,不計成本,奶酪每塊3元。
聰明的老鼠呢?它們每天可能會派出一只老鼠到牆角,看看牆角有啥:
•若什么也沒有(X),老鼠們就不高興了(Unhappy),會有長達一天(也就是第二天)的不高興期。在不高興期間,不派出老鼠。不高興期結束之后,派出老鼠。
•若有捕鼠夾(T),這只老鼠被引誘吃掉奶酪並被打死(Dead),老鼠們會有長達兩天(也就是第二和第三天)的傷心期。在傷心期間,不派出老鼠。傷心期結束之后,派出老鼠。在這種情況下,抓到1只老鼠可獲得獎勵10元,但同時也耗費了一塊奶酪。注意,如果某一天放置了捕鼠夾但老鼠沒有出現,則沒有耗費奶酪。
•若有奶酪(C),老鼠吃了奶酪會很開心(Happy!),會有長達兩天(第二和第三天)的興奮期。在興奮期間,即使疊加了不高興或者傷心,也必定派出老鼠。在這種情況下,沒抓到老鼠,而且耗費了一塊奶酪。注意,如果某一天放置了奶酪但老鼠沒有出現,則奶酪可以下次再用,沒有耗費。

現在給你連續幾天的操作序列,且已知第一天肯定會派出老鼠,請判斷老鼠每天的狀態,並計算盈利。

輸入格式:

輸入在一行中給出連續的由C或T或X組成的不超過70個字符的字符串,以$結束。字符串中每個字符表示這一天的操作( 即X:什么都不放;T:放捕鼠夾;C:放奶酪)。題目保證至少有一天的操作輸入。

輸出格式:

要求在第一行輸出連續的字符串,與輸入相對應,給出老鼠的狀態:
•! 表示派出老鼠吃到奶酪
•D 表示派出老鼠被打死
•U 表示派出老鼠無所獲
•- 表示沒有派出老鼠

第二行則應輸出一個整數表示盈利。(如果有虧損,則是負數)

輸入樣例1:
TXXXXC$

輸出樣例1:
D--U-!
4

輸入樣例2:
CTTCCX$

輸出樣例2:
!DD--U
11

實驗代碼

#include<stdio.h> 
int main (void)
{
	int money=0, i=1;
	char op;
	while(op!='$'){
		scanf("%c", &op);
		if(op=='T'){
			if(i>0){
				money=money+7;
			    printf("D"); 
			    if(i>2){
			       i=1;
		        }
		        else{
		    	   i=-2;
			    }
			}
		    else{
				printf("-");
			}
		}
		if(op=='X'){
			if(i>0) {
				i=-1;
			    printf("U");
			}
			else{
				printf("-");
			}
		}
		if(op=='C'){
			if(i>0) {
				i=2;
			    money=money-3;
			    printf("!");
			}
			else{
				printf("-");
			}
		}
		i++;
	}
	printf("\n%d", money);
}

設計思路

調試過程中遇到的問題及解決方法

1.遇到的問題:
因為忽略了最后一個i++,所以導致程序運算結果不對
2.遇到的問題: 為什么最后會多輸出一個符號?
仔細查看是因為op=‘X'的時候i=-1,所以多輸出一個’-‘

發現的最大的問題:就是如果這樣的話,會導致不派老鼠出來的那一天沒有任何輸出。而輸出出來的不派老鼠的那個符號是由前一個指令輸出的,意思就是前一個指令輸出了兩個符號,而后面的一個指令沒有輸出任何符號。

解決方法:把每個指令都判斷一次,符合相應條件輸出相應符號。保證一個指令只輸出一個符號。

運行結果截圖

其實一開始在c++上已經正確了,但是在PTA上全不正確,后來在PTA上給money賦初始值為0就正確了,就這個一點點沒想到,害我差點放棄了,雖然最后做出來了,但浪費了很多時間,所以要細心。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM