B4384 [语言月赛 202508] 选座专家
📋 问题描述
本题需要统计飞机上"好座位"的数量。一个好座位需要满足以下任意一个条件:
-
📍 位于第一排(行号
i = 1) -
🚪 位于该排最左或最右位置(列号
j = 1或j = c[i]) -
🔢 行号和列号的乘积个位是6(
(i × j) % 10 == 6)
给定多组测试数据,每组数据给出排数 n 和每排座位数 c[1..n],需要计算每组数据中好座位的总数。
💡 解题思路
📊 算法设计
这是一个典型的枚举统计问题,由于数据范围较小(n, c[i] ≤ 100),可以直接使用双重循环遍历所有座位:
-
数据存储:使用数组
c存储每排的座位数量 -
座位遍历:对于每个座位
(i, j)检查三个条件 -
计数统计:满足任一条件就计数,使用
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; }

浙公网安备 33010602011771号