zoukankan      html  css  js  c++  java
  • 小游戏得分[石头剪刀布]

    
    
      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 }
  • 相关阅读:
    $Poj2228$/洛谷$SP283 Naptime$ 环形$DP$
    $Poj1952 $洛谷$1687 Buy Low,Buy Lower$ 线性$DP+$方案计数
    $Poj3585 Accumulation Degree$ 树形$DP/$二次扫描与换根法
    洛谷$1541$ 乌龟棋 线性$DP$
    $Loj10157$ 皇宫看守 树形$DP$
    $loj10156/$洛谷$2016$ 战略游戏 树形$DP$
    $Loj10155$ 数字转换(求树的最长链) 树形$DP$
    洛谷$2015$二叉苹果树
    $CH5302$ 金字塔 区间$DP$/计数类$DP$
    [hiho1035] 自驾旅行III
  • 原文地址:https://www.cnblogs.com/minmsy/p/5212929.html
Copyright © 2011-2022 走看看