1 条题解

  • 0
    @ 2025-9-16 20:26:35

    核心逻辑

    1. 计算单张牌积分:根据牌面点数按规则转换为积分(1→15,2→16,3~13→本身,14→20,15→25)。
    2. 计算基础总积分:四张牌积分之和。
    3. 判断特殊规则
      • 炸弹:四张牌点数完全相同 → 总积分 = 基础积分 × 5。
      • 王炸:同时包含14(小王)和15(大王)→ 总积分 = 基础积分 + 160。
      • 无特殊规则 → 总积分 = 基础积分。

    代码实现

    C

    #include <stdio.h>
    
    // 计算单张牌的积分
    int get_score(int p) {
        if (p == 1) return 15;
        else if (p == 2) return 16;
        else if (p >= 3 && p <= 13) return p;
        else if (p == 14) return 20;
        else if (p == 15) return 25;
        return 0; // 无效输入(题目保证合法)
    }
    
    int main() {
        int a, b, c, d;
        scanf("%d %d %d %d", &a, &b, &c, &d);
        
        // 计算基础总积分
        int sum_base = get_score(a) + get_score(b) + get_score(c) + get_score(d);
        
        // 判断炸弹(四张牌点数相同)
        if (a == b && b == c && c == d) {
            printf("%d\n", sum_base * 5);
            return 0;
        }
        
        // 判断王炸(同时包含14和15)
        int has14 = (a == 14 || b == 14 || c == 14 || d == 14);
        int has15 = (a == 15 || b == 15 || c == 15 || d == 15);
        if (has14 && has15) {
            printf("%d\n", sum_base + 160);
            return 0;
        }
        
        // 无特殊规则
        printf("%d\n", sum_base);
        return 0;
    }
    

    C++

    #include <bits/stdc++.h>
    using namespace std;
    
    int get_score(int p) {
        if (p == 1) return 15;
        else if (p == 2) return 16;
        else if (3 <= p && p <= 13) return p;
        else if (p == 14) return 20;
        else if (p == 15) return 25;
        return 0;
    }
    
    int main() {
        int a, b, c, d;
        cin >> a >> b >> c >> d;
        
        int sum_base = get_score(a) + get_score(b) + get_score(c) + get_score(d);
        
        if (a == b && b == c && c == d) {
            cout << sum_base * 5 << endl;
            return 0;
        }
        
        bool has14 = (a == 14 || b == 14 || c == 14 || d == 14);
        bool has15 = (a == 15 || b == 15 || c == 15 || d == 15);
        if (has14 && has15) {
            cout << sum_base + 160 << endl;
            return 0;
        }
        
        cout << sum_base << endl;
        return 0;
    }
    

    Python

    def get_score(p):
        if p == 1:
            return 15
        elif p == 2:
            return 16
        elif 3 <= p <= 13:
            return p
        elif p == 14:
            return 20
        elif p == 15:
            return 25
        return 0
    
    # 读取输入
    a, b, c, d = map(int, input().split())
    
    # 计算基础总积分
    sum_base = get_score(a) + get_score(b) + get_score(c) + get_score(d)
    
    # 判断炸弹
    if a == b == c == d:
        print(sum_base * 5)
    else:
        # 判断王炸
        has14 = 14 in (a, b, c, d)
        has15 = 15 in (a, b, c, d)
        if has14 and has15:
            print(sum_base + 160)
        else:
            print(sum_base)
    
    • @ 2025-9-16 20:39:57
      #include<bits/stdc++.h>
      using namespace std;
      
      int get(int x){
          switch(x){
              case 1:return 15;
              case 2:return 16;
              case 14:return 20;
              case 15:return 25;
              default: return x;
          }
      }
      
      signed main(){
          int a[4],ans=0;
          for(int i=0;i<4;++i) {
              cin>>a[i];
              ans+=get(a[i]);
          }
          
          // 四个相同
          bool ok=true;
          for(int i=1;i<4;++i) if(a[0]!=a[i]) ok=false;
          if(ok) ans*=5;
      
          //大小王
          bool ok1=false,ok2=false;
          for(int i=0;i<4;++i) 
              if(a[i]==14) ok1=true; 
              else if(a[i]==15) ok2=true;
          if(ok1&&ok2) ans+=160;
      
          cout<<ans<<endl;
      }
      
  • 1

信息

ID
493
时间
1000ms
内存
256MiB
难度
4
标签
(无)
递交数
47
已通过
22
上传者