小游戏得分[石头剪刀布]


  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 #define Maxlen 100 //定义输入字符的长度
  5 
  6 //顺序栈
  7 typedef struct
  8 {
  9       char data[Maxlen];//存储字符
 10       int top;
 11 }SeqStack;
 12 
 13 SeqStack* Init()//栈初始化
 14 {
 15        SeqStack *s;
 16        s=(SeqStack *) malloc ( sizeof(SeqStack) );
 17        s->top = -1;
 18        return s;
 19 }
 20 
 21 void Destroy(SeqStack *s)//释放存储空间
 22 {
 23       free(s);
 24 }
 25 
 26 int IsFull(SeqStack *s)//判断为满
 27 {
 28        return (s->top == Maxlen-1) ? 1:0;
 29 }
 30 
 31 int IsEmpty(SeqStack *s)//判断为空
 32 {
 33       return (s->top == -1) ? 1:0;
 34 }
 35 
 36 void Push(SeqStack *s, char e)//入栈
 37 {
 38       if( IsFull(s) )
 39       {
 40              printf("栈为满,无法入栈!
");
 41              return;
 42       }
 43       s->top ++;
 44       s->data[ s->top ] = e;
 45 }
 46 
 47 int Pop(SeqStack *s)//出栈
 48 {
 49        char e;
 50        if( IsEmpty(s) )
 51        {
 52               printf("栈为空,没有数据!
");
 53               return NULL; 
 54        }
 55        e = s->data[ s->top ];
 56        s->top --;
 57        return e;
 58 }
 59 
 60 
 61 //返回字符数组元素的个数
 62 int Mystrlen(char *str)
 63 {
 64     int num = 0;
 65     for(;*str!='';str++)//当没遇到回车符的时候 字符数目+1
 66         num++;
 67     return num;
 68 }
 69 
 70 int main()
 71 {
 72     char string[Maxlen];//存储键盘输入的字符串
 73     char temp;
 74     int n,length,a,b,c,sum,i;//n:总执行次数,a:出S次数,b:出J次数,c:出B次数,sum:总成绩;
 75     SeqStack *s;
 76     while(1)
 77     {
 78         printf("input n:");
 79         scanf("%d",&n);//输入n
 80         if(n==0)break;//当n=0时输入结束
 81         sum=0;//总分初始化为0
 82         printf("input string:");
 83         scanf("%s", string);//输入对手每次出的数据
 84         printf("input a b c:");
 85         scanf("%d%d%d",&a,&b,&c);//输入a次S,b次J和c次B(a,b,c都是非负并且a+b+c=n)。
 86         
 87         length=Mystrlen(string);//获得输入字符串的长度
 88 
 89         
 90         s=Init();
 91         for(i=0;i<length;i++)Push(s,string[i]);
 92        
 93         while(!IsEmpty(s))
 94         {
 95             temp = Pop(s);
 96             if(temp=='S')//如果当前的字符是S:石头
 97             {
 98                 if(c>0)//如果当前“布”未被用的次数大于0,选择出“布”,可赢  得1分
 99                 {
100                     c--;//“布”可被用的次数-1
101                     sum++;//得一分
102                 }
103                 else if(a>0)//如果当前“石头”未被用的次数大于0,选择出“石头”,平局  不得分
104                 {
105                     a--;//“石头”可被用的次数-1
106                 }
107                 else//如果当前“剪刀”未被用的次数大于0,选择出“剪刀”,输  扣1分
108                 {
109                     b--;//“剪刀”可被用的次数-1
110                     sum--;//扣一分
111                 }
112             }
113             else if(temp=='J')//如果当前的字符是J:剪刀
114             {
115                 if(a>0)//如果当前“石头”未被用的次数大于0,选择出“石头”,可赢  得1分
116                 {
117                     a--;//“石头”可被用的次数-1
118                     sum++;//得一分
119                 }
120                 else if(b>0)//如果当前“剪刀”未被用的次数大于0,选择出“剪刀”,平局  不得分
121                 {
122                     b--;//“剪刀”可被用的次数-1
123                 }
124                 else//如果当前“布”未被用的次数大于0,选择出“布”,输  扣1分
125                 {
126                     c--;//“布”可被用的次数-1
127                     sum--;//扣一分
128                 }
129             }
130             else if(temp=='B')
131             {
132                 if(b>0)//如果当前“剪刀”未被用的次数大于0,选择出“剪刀”,可赢  得1分
133                 {
134                     sum++;//得一分
135                     b--;//“剪刀”可被用的次数-1    
136                 }
137                 else if(c>0)//如果当前“布”未被用的次数大于0,选择出“布”,平局  不得分
138                 {
139                     c--;//“布”可被用的次数-1
140                 }
141                 else
142                 {
143                     a--;//“石头”可被用的次数-1
144                     sum--;//扣一分
145                 }
146             }
147         }
148         printf("sum=%d
",sum);//输出可得最大的总分
149         Destroy(s);//销毁栈
150     }
151     return 0;
152 }
153 
154 
155         


 1 #include <stdio.h>
 2 
 3 #define Maxlen 100 //定义输入字符的长度
 4 
 5 //返回字符数组元素的个数
 6 int Mystrlen(char *str)
 7 {
 8     int num = 0;
 9     for(;*str!='';str++)//当没遇到回车符的时候 字符数目+1
10         num++;
11     return num;
12 }
13 
14 int main()
15 {
16     char string[Maxlen];//存储键盘输入的字符串
17     int n,length,a,b,c,sum,i;//n:总执行次数,a:出S次数,b:出J次数,c:出B次数,sum:总成绩;
18     while(1)
19     {
20         printf("input n:");
21         scanf("%d",&n);//输入n
22         if(n==0)break;//当n=0时输入结束
23         sum=0;//总分初始化为0
24         printf("input string:");
25         scanf("%s", string);//输入对手每次出的数据
26         printf("input a b c:");
27         scanf("%d%d%d",&a,&b,&c);//输入a次S,b次J和c次B(a,b,c都是非负并且a+b+c=n)。
28         
29         length=Mystrlen(string);//获得输入字符串的长度
30         for(i=0;i<length;i++)
31         {
32             if(string[i]=='S')//如果当前的字符是S:石头
33             {
34                 if(c>0)//如果当前“布”未被用的次数大于0,选择出“布”,可赢  得1分
35                 {
36                     c--;//“布”可被用的次数-1
37                     sum++;//得一分
38                 }
39                 else if(a>0)//如果当前“石头”未被用的次数大于0,选择出“石头”,平局  不得分
40                 {
41                     a--;//“石头”可被用的次数-1
42                 }
43                 else//如果当前“剪刀”未被用的次数大于0,选择出“剪刀”,输  扣1分
44                 {
45                     b--;//“剪刀”可被用的次数-1
46                     sum--;//扣一分
47                 }
48             }
49             else if(string[i]=='J')//如果当前的字符是J:剪刀
50             {
51                 if(a>0)//如果当前“石头”未被用的次数大于0,选择出“石头”,可赢  得1分
52                 {
53                     a--;//“石头”可被用的次数-1
54                     sum++;//得一分
55                 }
56                 else if(b>0)//如果当前“剪刀”未被用的次数大于0,选择出“剪刀”,平局  不得分
57                 {
58                     b--;//“剪刀”可被用的次数-1
59                 }
60                 else//如果当前“布”未被用的次数大于0,选择出“布”,输  扣1分
61                 {
62                     c--;//“布”可被用的次数-1
63                     sum--;//扣一分
64                 }
65             }
66             else if(string[i]=='B')
67             {
68                 if(b>0)//如果当前“剪刀”未被用的次数大于0,选择出“剪刀”,可赢  得1分
69                 {
70                     sum++;//得一分
71                     b--;//“剪刀”可被用的次数-1    
72                 }
73                 else if(c>0)//如果当前“布”未被用的次数大于0,选择出“布”,平局  不得分
74                 {
75                     c--;//“布”可被用的次数-1
76                 }
77                 else
78                 {
79                     a--;//“石头”可被用的次数-1
80                     sum--;//扣一分
81                 }
82             }
83         }
84         printf("sum=%d
",sum);//输出可得最大的总分
85     }
86     return 0;
87 }
原文地址:https://www.cnblogs.com/minmsy/p/5212929.html