蓝桥杯历届真题 #食堂(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();
    }
}
相关推荐
Larry_Yanan6 分钟前
QML学习笔记(四十二)QML的MessageDialog
c++·笔记·qt·学习·ui
失散137 分钟前
分布式专题——47 ElasticSearch搜索相关性详解
java·分布式·elasticsearch·架构
serve the people9 分钟前
LangChain 表达式语言核心组合:Prompt + LLM + OutputParser
java·langchain·prompt
想ai抽12 分钟前
深入starrocks-多列联合统计一致性探查与策略(YY一下)
java·数据库·数据仓库
武子康20 分钟前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
杰克尼25 分钟前
JavaWeb_p165部门管理
java·开发语言·前端
R-G-B28 分钟前
【35】MFC入门到精通——MFC运行 不显示对话框 MFC界面不显示
c++·mfc·mfc运行 不显界面·mfc界面不显示
longgyy35 分钟前
5 分钟用火山引擎 DeepSeek 调用大模型生成小红书文案
java·数据库·火山引擎
一成码农1 小时前
JavaSE面向对象(下)
java·开发语言
Madison-No71 小时前
【C++】探秘vector的底层实现
java·c++·算法