小游戏得分[石头剪刀布]
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("栈为满,无法入栈!\n"); 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("栈为空,没有数据!\n"); 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!='\0';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\n",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!='\0';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\n",sum);//输出可得最大的总分 85 } 86 return 0; 87 }