当前位置: 代码迷 >> 综合 >> 1018 锤子剪刀布 (20 分)
  详细解决方案

1018 锤子剪刀布 (20 分)

热度:52   发布时间:2023-10-13 23:39:04.0

原题链接

思路

就是按顺序输入,写六个if判断每种情况,然后记录甲赢的次数和乙赢的次数,甲的次数就是乙输的次数,反之同理,然后开了两个数组a,b分别记录甲乙赢的时候出的是什么,出了几次,123分别代表BCJ,最后输出时写if判断即可,不用想复杂了用循环写。

坑点

注意如果一个人1次都没赢的话应该也输出B才对。

代码

#include<bits/stdc++.h>
using namespace std;
int a[10] = {
    0}; //甲,获胜 出的手势的次数, 
int b[10] = {
    0}; //乙,获胜 出的手势的次数,
int main()
{
    int jiayin = 0, yiyin = 0;; int n;cin >> n;for (int i = 1; i <= n; i ++ ){
    char x, y;cin >> x >> y;//6种情况if (x == 'C' && y == 'J'){
    jiayin ++;a[2] ++;}else if (x == 'J' && y == 'C'){
    yiyin ++;b[2] ++;}else if (x == 'C' && y == 'B'){
    yiyin ++;b[1] ++;}else if (x == 'B' && y == 'C'){
    jiayin ++;a[1] ++;}else if (x == 'J' && y == 'B'){
    jiayin ++;a[3] ++;}else if (x == 'B' && y == 'J'){
    yiyin ++;b[3] ++;}}cout << jiayin << " " << n - jiayin - yiyin << " " << yiyin << endl;cout << yiyin << " " << n - jiayin - yiyin << " " << jiayin << endl;//判断出赢得次数最多的手势if (a[1] >= a[2] && a[1] >= a[3]) cout << "B ";else if (a[2] > a[1] && a[2] >= a[3]) cout << "C ";else if (a[3] > a[2] && a[3] > a[1]) cout << "J ";if (b[1] >= b[2] && b[1] >= b[3]) cout << "B";else if (b[2] > b[1] && b[2] >= b[3]) cout << "C";else if (b[3] > b[2] && b[3] > b[1]) cout << "J";
// int minn = -1;
// int f = 0;
// for (int i = 1; i <= 3; i ++ )
// {
    
 cout << a[i] << " ";
// if (a[i] > minn) 
// {
    
// minn = a[i];
// f = i;
// }
// }
 if (f == 0) cout << " ";
// if (f == 1) cout << "B ";
// if (f == 2) cout << "C ";
// if (f == 3) cout << "J ";
// minn = -1;
// f = 0;
// for (int i = 1; i <= 3; i ++ )
// {
    
// if (b[i] > minn) 
// {
    
// minn = a[i];
// f = i;
// }
// }
 if (f == 0) cout << " ";
// if (f == 1) cout << "B";
// if (f == 2) cout << "C";
// if (f == 3) cout << "J";return 0;
}

总结

做的时候因为比大小那块可能想复杂了,用了循环写,导致出现了问题,后来改用了if判断就好了。在这些要比较的数量极少且条件按很多时,还是用if写方便又省心。

  相关解决方案