L1-095 分寝室

这道题用枚举法即可。

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n0, n1, n;
    scanf("%d %d %d", &n0, &n1, &n);  // 输入女生人数、男生人数、寝室数

    int best_a = -1, best_b = -1;  // 记录最优解
    int min_diff = 100005;  // 记录最小人数差

    // 遍历所有可能的分配方案
    for (int a = 1; a < n; a++) {
        int b = n - a;  // 男生寝室数

        // 检查女生寝室分配是否合法
        if (n0 % a != 0) continue;  // 每间女生寝室人数必须相同
        int k0 = n0 / a;  // 每间女生寝室人数
        if (k0 < 2) continue;  // 不允许单人住一间寝室

        // 检查男生寝室分配是否合法
        if (n1 % b != 0) continue;  // 每间男生寝室人数必须相同
        int k1 = n1 / b;  // 每间男生寝室人数
        if (k1 < 2) continue;  // 不允许单人住一间寝室

        // 计算人数差
        int diff = abs(k0 - k1);

        // 更新最优解
        if (diff < min_diff) {
            min_diff = diff;
            best_a = a;
            best_b = b;
        }
    }

    // 输出结果
    if (best_a != -1 && best_b != -1) {
        printf("%d %d\n", best_a, best_b);
    } else {
        printf("No Solution\n");
    }

    return 0;
}

全部评论

相关推荐

你见过凌晨四点的牛客吗_BY_KobeBryant:明年再投都一样😂😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务