蓝桥杯历届真题 #食堂(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();
    }
}
相关推荐
就叫_这个吧21 分钟前
Activiti7工作流入门+案例应用
java·activiti7·工作流
Z_W_H_29 分钟前
minikube start --driver=docker --memory=4000mb出现PROVIDER_DOCKER_NEWGRP
java·docker·minikube
一拳一个呆瓜36 分钟前
【STL】iostream 编程:缓冲区的作用
c++·stl
折哥的程序人生 · 物流技术专研37 分钟前
第3篇:手写促销策略引擎(满减、打折、立减)
java·设计模式·策略模式·开闭原则·编程实战·扩充系列·促销引擎
变量未定义~1 小时前
单调栈、单调队列(模板)、子矩阵(模板)
数据结构·算法·蓝桥杯
郑州光合科技余经理1 小时前
海外外卖平台源码改造实战——多语言核心代码实现
java·开发语言·前端·后端·mysql·架构·php
耀耀_很无聊1 小时前
12_Redis Lua 脚本踩坑:为什么 tonumber(ARGV[x]) 会得到 nil?
java·redis·lua
凯瑟琳.奥古斯特1 小时前
力扣1012数位DP解法详解
开发语言·c++·算法·leetcode·职场和发展
奶油话梅糖1 小时前
锐捷常用命令速查表
java·网络·windows
code_std2 小时前
java WebSocket 使用
java·开发语言·websocket