B4384 [语言月赛 202508] 选座专家

📋 问题描述

本题需要统计飞机上"好座位"的数量。一个好座位需要满足以下任意一个条件:

  1. 📍 位于第一排(行号 i = 1

  2. 🚪 位于该排最左或最右位置(列号 j = 1 或 j = c[i]

  3. 🔢 行号和列号的乘积个位是6((i × j) % 10 == 6

给定多组测试数据,每组数据给出排数 n 和每排座位数 c[1..n],需要计算每组数据中好座位的总数。


💡 解题思路

📊 算法设计

这是一个典型的枚举统计问题,由于数据范围较小(n, c[i] ≤ 100),可以直接使用双重循环遍历所有座位:

  1. 数据存储:使用数组 c 存储每排的座位数量

  2. 座位遍历:对于每个座位 (i, j) 检查三个条件

  3. 计数统计:满足任一条件就计数,使用 if-else if 结构避免重复计数

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    #define endl '\n'
    const int N = 1e2 + 10, inf = 0x3f3f3f3f;
    
    int T;      // 📌 测试数据组数
    int c[N];   // 📌 存储每排座位数量的数组
    
    int main() {
        cin >> T;  // 📥 读取测试数据组数
        
        // 🔄 处理每组测试数据
        while(T--){
            int n;
            cin >> n;  // 📥 读取座椅排数
            
            // 📥 读取每排的座椅数量
            for(int i = 1; i <= n; i++){
                cin >> c[i];
            }
            
            int ans = 0;  // 📊 初始化好座位计数器
            
            // 🔢 遍历每一排(行号i从1到n)
            for(int i = 1; i <= n; i++){   
                // 🔢 遍历当前排的每个座位(列号j从1到c[i])
                for(int j = 1; j <= c[i]; j++) { 
                    // ✅ 条件1:位于第一排
                    if(i == 1){ 
                        ans++;  // 📈 计数增加
                    }
                    // ✅ 条件2:位于该排最左或最右位置
                    else if(j == 1 || j == c[i]){ 
                        ans++;  // 📈 计数增加
                    }
                    // ✅ 条件3:行号列号乘积个位是6
                    else if((i * j) % 10 == 6){ 
                        ans++;  // 📈 计数增加
                    }
                }
            }
            
            // 📤 输出当前组的好座位数量
            cout << ans << endl;
        }
        return 0;
    }

     

posted @ 2025-09-07 15:23  乐意丘  阅读(60)  评论(0)    收藏  举报