某地老鼠成灾, 现悬赏抓老鼠, 每抓到一只奖励 10 元, 于是开始跟老鼠斗智斗勇: 每天在墙角可选择以下三个操作: 放置一个带有一块奶酪的捕鼠夹(T), 或者放置一块奶酪(C), 或者什么也不放(X). 捕鼠夹可重复利用, 不计成本, 奶酪每块 3 元.
聪明的老鼠呢? 它们每天可能会派出一只老鼠到墙角, 看看墙角有啥:
若什么也没有 (X), 老鼠们就不高兴了(Unhappy), 会有长达一天(也就是第二天) 的不高兴期. 在不高兴期间, 不派出老鼠. 不高兴期结束之后, 派出老鼠.
若有捕鼠夹 (T), 这只老鼠被引诱吃掉奶酪并被打死(Dead), 老鼠们会有长达两天(也就是第二和第三天) 的伤心期. 在伤心期间, 不派出老鼠. 伤心期结束之后, 派出老鼠. 在这种情况下, 抓到 1 只老鼠可获得奖励 10 元, 但同时也耗费了一块奶酪. 注意, 如果某一天放置了捕鼠夹但老鼠没有出现, 则没有耗费奶酪.
若有奶酪 (C), 老鼠吃了奶酪会很开心(Happy!), 会有长达两天(第二和第三天) 的兴奋期. 在兴奋期间, 即使叠加了不高兴或者伤心, 也必定派出老鼠.
- #include<stdio.h>
- int money=0,state; // 全局变量 money,state
- int search(char a,int n); // 声明函数, 定义字符, int 类型的指针
- int main(void)
- {
- char s[70];
- int i=0;
- state=1; //state 的值: 1 = 派老鼠, 0 = 不派老鼠, 2 = 两天派, 3 = 两天不派
- scanf("%s",s); // 输入字符 T,X,C,$
- while(s[i]!='$')
- {
- if(state==0) // 不派老鼠
- {
- printf("-");
- state=1; // 派老鼠
- }
- else if(state==1) // 派老鼠
- {
- search(s[i],state); //state 表示把 state 值赋给 n
- }
- else if(state==2) // 兴奋期, 两天派
- {
- search(s[i],state);
- }
- else if(state==3) // 伤心期, 两天不派
- {
- printf("-");
- state=0;
- }
- i++;
- }
- printf("\n%d",money);
- return 0;
- }
- int search(char a,int n) // 定义函数 //n=0 不派老鼠
- { //n=1 派老鼠
- if(a=='X') // 不高兴 //n=2 两天派老鼠
- { //n=3 两天不派老鼠
- if(n==2) n=1;
- else n=0;
- printf("U");
- }
- else if(a=='T') // 被打死
- {
- if(n==2) n=1;
- else n=3;
- printf("D");
- money=money+7;
- }
- else if(a=='C') // 高兴
- {
- n=2;
- printf("!");
- money=money-3;
- }
- state=n;
- return n;
- }
来源: http://www.bubuko.com/infodetail-2962192.html