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;
}
查看16道真题和解析