蓝桥杯历届真题 #食堂(C++,Java)

这题没什么好说的

考虑所有情况然后写就完了

虽然赛场上 交完不知道答案(doge)

原题链接

cpp 复制代码
#include<iostream>

using namespace std;

int main() {
    int n;
    cin >> n;
    //能优先安排6人桌,要先安排6人桌
    //6人桌可以是2+2+2 或者 3+3 或者4+2
    //优先用3+3组合,因为3人寝只能凑6人桌
    //2+2+2 和 4+2 优先用哪个都一样
    //因为剩下奇数个2还是偶数个2都能去搭配
    while (n--) {
        int a2, a3, a4, b4, b6;
        cin >> a2 >> a3 >> a4 >> b4 >> b6;
        int res = 0;
        //先凑6人
        while (b6) {
            //3+3
            if (a3 / 2 > 0 && a3) {
                res += 6;
                a3 -= 2;
                b6 -= 1;
                continue;
            }
            //4+2(2+2+2也可以)
            if (a4 && a2) {
                res += 6;
                a4 -= 1;
                a2 -= 1;
                b6 -= 1;
                continue;
            }
            //最后凑2+2+2
            if (a2 / 3 != 0 && a2) {
                res += 6;
                a2 -= 3;
                b6 -= 1;
                continue;
            }
            //凑不出来6人就break
            //凑6人2+2+2 或者a3>=2 或者 1个4 1个2
            if ((a2 == 0 && a3 < 2) || (a2 < 3 && a3 < 2 && a4 == 0))break;
        }
        //凑4人
        while (b4 > 0) {
            //凑4人桌的优先级也是一样的(找不出来反例)
            if (a4) {
                a4 -= 1;
                res += 4;
                b4 -= 1;
                continue;
            }
            if (a2 / 2 != 0 && a2) {
                a2 -= 2;
                res += 4;
                b4 -= 1;
                continue;
            }
            //凑不出来4人就break
            //凑4人 2+2 或者 4
            if (a2 <= 1 && a4 == 0)break;
        }
        //最后盘算坐不满的情况
        //比如一个6人桌给两个人坐
        while (b6) {
            if (a2 && a3) {
                a2 -= 1;
                a3 -= 1;
                res += 5;
                b6 -= 1;
            }
            else if (a4) {
                a4 -= 1;
                b6 -= 1;
                res += 4;
            }
            else if (a3) {
                a3 -= 1;
                b6 -= 1;
                res += 3;
            }
            else if (a2) {
                a2 -= 1;
                b6 -= 1;
                res += 2;
            }
            else break;
        }
        while (b4) {
            if (a3 > 0) {
                b4 -= 1;
                a3 -= 1;
                res += 3;
            }
            else if (a2) {
                b4 -= 1;
                a2 -= 1;
                res += 2;
            }
            else break;
        }

        cout << res << endl;

    }
    return 0;
}
java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        while (n-- > 0) {
            int a2 = scanner.nextInt();
            int a3 = scanner.nextInt();
            int a4 = scanner.nextInt();
            int b4 = scanner.nextInt();
            int b6 = scanner.nextInt();

            int res = 0;
            // 先凑6人
            while (b6 > 0) {
                // 3+3
                if (a3 >= 2) {
                    res += 6;
                    a3 -= 2;
                    b6 -= 1;
                    continue;
                }
                // 4+2
                if (a4 > 0 && a2 > 0) {
                    res += 6;
                    a4 -= 1;
                    a2 -= 1;
                    b6 -= 1;
                    continue;
                }
                // 2+2+2
                if (a2 >= 3) {
                    res += 6;
                    a2 -= 3;
                    b6 -= 1;
                    continue;
                }
                // 凑不出来6人就break
                if ((a2 == 0 && a3 < 2) || (a2 < 3 && a3 < 2 && a4 == 0)) {
                    break;
                }
            }
            // 凑4人
            while (b4 > 0) {
                // 凑4人桌的优先级也是一样的(找不出来反例)
                if (a4 > 0) {
                    a4 -= 1;
                    res += 4;
                    b4 -= 1;
                    continue;
                }
                if (a2 >= 2) {
                    a2 -= 2;
                    res += 4;
                    b4 -= 1;
                    continue;
                }
                // 凑不出来4人就break
                if (a2 <= 1 && a4 == 0) {
                    break;
                }
            }
            // 最后盘算坐不满的情况
            while (b6 > 0) {
                if (a2 > 0 && a3 > 0) {
                    a2 -= 1;
                    a3 -= 1;
                    res += 5;
                    b6 -= 1;
                } else if (a4 > 0) {
                    a4 -= 1;
                    res += 4;
                    b6 -= 1;
                } else if (a3 > 0) {
                    a3 -= 1;
                    res += 3;
                    b6 -= 1;
                } else if (a2 > 0) {
                    a2 -= 1;
                    res += 2;
                    b6 -= 1;
                } else {
                    break;
                }
            }
            while (b4 > 0) {
                if (a3 > 0) {
                    b4 -= 1;
                    a3 -= 1;
                    res += 3;
                } else if (a2 > 0) {
                    b4 -= 1;
                    a2 -= 1;
                    res += 2;
                } else {
                    break;
                }
            }

            System.out.println(res);
        }

        scanner.close();
    }
}
相关推荐
nice_lcj5201 小时前
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal
秋天的怀念_David1 小时前
算法一千零一夜 · 第二十六夜 协议的母语
java·spring boot·算法
灿飞1 小时前
Kotlin与Java虚拟机八:控制流与 when:卫语句、上下文相关解析与穷尽性
java·kotlin
文丑颜不良啊2 小时前
LeetCode2021~2040题目解析
java·leetcode
bksczm3 小时前
InnoDB 行格式详解:DYNAMIC / COMPACT / COMPRESSED / REDUNDANT
java·开发语言·数据库
liangbo73 小时前
Spring系列03:Bean 的三种注册方式
java·spring
余槐i3 小时前
MySQL 8.0 联合索引走错:为什么加了索引查询反而从 200ms 变成 8s
java·spring boot·mysql·docker·性能优化
SL_staff3 小时前
制造业订单交付总在最后一刻爆雷?用结构化计划模板打通跨系统协同断点
java·开源·全栈
做科研的周师兄3 小时前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
青少儿编程课堂4 小时前
蓝桥杯青少组省考(11/9报名截止·11/22开考)+电子学会图形化考级+信息素养大赛:校园极速跑酷闯关解析
蓝桥杯·scratch·图形化编程·信息素养大赛·电子学会考级