抓老鼠啊~亏了还是赚了?
题目:某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C),或者什么也不放(X)。捕鼠夹可重复利用,不计成本,奶酪每块3元。
设计思路
该题一共有3个操作,这三个操作又会给老鼠带来三种状态(unhappy,sad,happy),这三种状态决定的是否行动(move)
根据题目描述作出判断后即可输出结果
本题调试过程碰到问题及解决办法
该题需要注意(我在做的时候误解的地方)
- 奶酪、老鼠夹在放下后,无论状态如何,都会在一天结束后收回(如果奶酪被吃了当然就不能收回了)
- 老鼠伤心是接下来的两天,并非伤心的时间+2
运行结果

实验代码
1 #include <stdio.h> 2 3 int main(void) 4 { 5 char act[70]; 6 int n,unhappy,sad,happy, 7 money,move; 8 9 scanf("%s",act); 10 11 n=0,money=0,move=1,12 sad=0,unhappy=0,happy=0; 13 while(act[n]!='$'&& act[n]!='\0')//避免输入没有$而出现死循环 14 { 15 char c = act[n]; 16 17 if(sad==0&&unhappy==0&&happy==0)//没有任何状态时老鼠出动 18 { 19 move=1; 20 } 21 22 else if(happy!=0) 23 { 24 move=1; 25 happy-=1; 26 if(sad!=0) 27 { 28 sad-=1; 29 } 30 else if(unhappy!=0) 31 { 32 unhappy-=1; 33 } 34 } 35 36 else if(sad!=0) 37 { 38 move=0; 39 sad-=1; 40 } 41 42 else if(unhappy!=0) 43 { 44 move=0; 45 unhappy-=1; 46 } 47 48 if(move==0) 49 { 50 printf("-"); 51 } 52 53 54 if(c=='T') 55 { 56 if(move) 57 { 58 money+=7; 59 sad+=2; 60 if(sad>2)//老鼠牺牲是接下来两天伤心 61 { //并非伤心时间加两天 62 sad-=1;//这种方法只能算是亡羊补牢 63 } 64 printf("D"); 65 } 66 } 67 68 if(c=='C') 69 { 70 if(move) 71 { 72 money-=3; 73 happy+=2; 74 printf("!"); 75 } 76 } 77 78 if(c=='X') 79 { 80 if(move) 81 { 82 unhappy+=1; 83 printf("U"); 84 85 } 86 } 87 88 n++; 89 } 90 printf("\n%d",money); 91 return 0; 92 }

浙公网安备 33010602011771号