家务分配问题

题目描述:

lcy和Ypop因为谁做家务的问题争执了起来,lcy每天辛辛苦苦上班,Ypop每天辛辛苦苦科研,其实这两个人都是大懒虫(其实lcy更懒),所以lcy和Ypop决定玩骰子游戏,
他们用三颗六面的骰子,游戏规则如下:
1.点数的优先级是1点最大,其次是6,5,4,3,2。
2.三个骰子点数相同,称为"豹子",豹子之间按点数优先级比较大小。
3.如果只有两个骰子点数相同,称为"对子",对子之间按点数优先级比较大小。
4.其他情况称为"点子",点子按点数和比较大小。
5.豹子比对子、点子大,对子比点子大,如果对子的点数优先级相同,就看剩余那个骰子的点数优先级。
现在给你lcy和Ypop投掷骰子的情况,判断一下胜负情况。

输入: 第一行输入一个整数K,表示游戏的次数。 以后每两行表示一个样例,第一行是lcy骰子的点数。第二行是Ypop骰子的点数。

输出: 如果是lcy赢,输出"lcy",如果是Bob赢,输出"Ypop",否则输出"Draw"。

 

这道题难就难在分类思想,分类必须要特别细,各种情况都需要考虑到,而且如果if设置的判断条件逻辑思维混乱的话,就算本机运行没有问题,oj上也过不了。其余都还比较简单,各种应注意的都写在了注释里面,完整代码如下(C语言代码):

  1 #include <stdio.h>
  2 int main(void)
  3 {
  4     int duizi(int x,int y,int z);
  5     int another(int x,int y,int z);
  6     int T;
  7     int t1,t2;
  8     int s1,s2;
  9     int sum1,sum2;
 10     int a,b,c;
 11     int m,n,p;
 12     scanf("%d",&T);
 13     while(T--)
 14     {
 15         scanf("%d %d %d",&a,&b,&c);      //lcy的数据 
 16         scanf("%d %d %d",&m,&n,&p);        //Ypop的数据 
 17         
 18         if(a>=1&&a<=6&&b>=1&&b<=6&&c>=1&&c<=6&&m>=1&&m<=6&&n>=1&&n<=6&&p>=1&&p<=6)
 19         {
 20             if(a==b && b==c && c==a)    
 21             {
 22                 if(m==n && n==p && p==m)  //这是二者都是豹子的情况
 23                 {
 24                     if(a==m)
 25                     {
 26                         printf("Draw\n");
 27                     }
 28                     else if(a==1 && m!=1)
 29                     {
 30                         printf("lcy\n");
 31                     }
 32                     else if(m==1 && a!=1)
 33                     {
 34                         printf("Ypop\n");
 35                     }
 36                     else if(a!=1 && m!=1)
 37                     {
 38                         if(a > m)
 39                         {
 40                             printf("lcy\n");
 41                         }
 42                         else if(a < m)
 43                         {
 44                             printf("Ypop\n");
 45                         }
 46                     }
 47                 }
 48                 else   //Ypop不是豹子,则肯定lcy赢 
 49                 {
 50                     printf("lcy\n");
 51                 }
 52             }
 53         
 54         
 55             else if((a==b && c!=a) || (b==c && a!=b) || (c==a && b!=c))  //lcy是对子 
 56             {
 57                 if((m==n && p!=m) || (n==p && m!=n) || (p==m && n!=p))  //如果Ypop是对子 
 58                 {
 59                     t1 = duizi(a,b,c);
 60                     t2 = duizi(m,n,p);
 61                     if(t1==t2)   //对数优先级相同,考虑剩下那个的优先级 
 62                     {
 63                         s1 = another(a,b,c);
 64                         s2 = another(m,n,p);
 65                         if(s1==s2)
 66                         {
 67                             printf("Draw\n");
 68                         }
 69                         else if(s1==1 && s2!=1)
 70                         {
 71                             printf("lcy\n");
 72                         }
 73                         else if(s2==1 && s1!=1)
 74                         {
 75                             printf("Ypop\n");
 76                         }
 77                         else if(s1!=1 && s2!=1)
 78                         {
 79                             if(s1 > s2)
 80                             {
 81                                 printf("lcy\n");
 82                             }
 83                             else if(s1 < s2)
 84                             {
 85                                 printf("Ypop\n");
 86                             }
 87                         }
 88                     }
 89                     else if(t1==1 && t2!=1)
 90                     {
 91                         printf("lcy\n");
 92                     }
 93                     else if(t2==1 && t1!=1)
 94                     {
 95                         printf("Ypop\n");
 96                     }
 97                     else if(t1!=1 && t2!=1)
 98                     {
 99                         if(t1 > t2)
100                         {
101                             printf("lcy\n");
102                         }
103                         else if(t1 < t2)
104                         {
105                             printf("Ypop\n");
106                         }
107                     }
108                 }
109                 else if(m==n && n==p && p==m)  //Ypop是豹子 
110                 {
111                     printf("Ypop\n");
112                 }
113                 else if(m!=n && n!=p && p!=m)  //Ypop是点子 
114                 {
115                     printf("lcy\n");
116                 }
117             }
118         
119         
120             else if(a!=b && b!=c && c!=a)  //lcy是点子 
121             {
122                 if(m!=n && n!=p && p!=m)   //Ypop是点子 
123                 {
124                     sum1 = a + b + c;
125                     sum2 = m + n + p;
126                     if(sum1 == sum2)
127                     {
128                         printf("Draw\n");
129                     }
130                     else if(sum1 > sum2)
131                     {
132                         printf("lcy\n");
133                     }
134                     else if(sum1 < sum2)
135                     {
136                         printf("Ypop\n");
137                     }
138                 }
139                 else  //Ypop不是点子,则肯定Ypop赢 
140                 {
141                     printf("Ypop\n");
142                 }
143             }
144         }
145         a=0;b=0;c=0;
146         m=0;n=0;p=0;
147     }
148     return 0; 
149 }
150 
151 int duizi(int x,int y,int z)
152 {
153     int t;
154     if(x==y && z!=x)
155     {
156         t = x;
157     }
158     else if(y==z && x!=y)
159     {
160         t = y;
161     }
162     else if(x==z && y!=x)
163     {
164         t = z;
165     }
166     return t;
167 }
168 
169 int another(int x,int y,int z)
170 {
171     int ano;
172     if(x==y && z!=x)
173     {
174         ano = z;
175     }
176     else if(y==z && x!=y)
177     {
178         ano = x;
179     }
180     else if(x==z && y!=z)
181     {
182         ano = y;
183     }
184     return ano;
185 }

运行效果如下图:

PS:emmm本人还是编程萌新一枚,如果各位大佬有更好的方法,可以在下面留言评论嗷

 

posted @ 2021-01-24 00:06  EvanTheBoy  阅读(265)  评论(0)    收藏  举报