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; }