使用c++写程序:学校新建了宿舍楼共有 n 间寝室。等待分配的学生中有女生 n 0 位、男生 n 1 位。所有待分配的学生都必须分到一间寝室。所有的寝室都要分出去最后不能有寝室留空。现请你写程序完成寝室的自动分配。分配规则如下:男女生不能混住;不允许单人住一间寝室;对每种性别的学生每间寝室入住的人数都必须相同;例如不能出现一部分寝室住 2 位女生一部分寝室住 3 位女生的情况。但女生寝室都
题目要求将n0个女生和n1个男生分配到n个寝室中,满足以下条件:
- 男女生不能混住;
- 不允许单人住一间寝室;
- 对每种性别的学生,每间寝室入住的人数都必须相同;
- 在有多种分配方案满足前面三项要求的情况下,要求两种性别每间寝室入住的人数差最小。
根据题目要求,我们可以得到以下几个结论:
- 对于男生寝室,每间寝室入住的人数应为n1/n;
- 对于女生寝室,每间寝室入住的人数应为n0/n;
- 如果n1/n和n0/n都是整数,说明可以满足前三项要求,同时人数差为0;
- 如果n1/n和n0/n都不是整数,那么只要满足前三项要求,人数差最小必然是1。
根据上述结论,我们可以编写如下程序来解决问题:
#include <iostream>
using namespace std;
int main() {
int n0, n1, n;
cin >> n0 >> n1 >> n;
// 计算男生寝室每间寝室入住的人数
int m1 = n1 / n;
// 计算女生寝室每间寝室入住的人数
int m0 = n0 / n;
// 如果男生寝室或女生寝室每间寝室入住的人数不是整数,则无解
if (n1 % n != 0 || n0 % n != 0) {
cout << "No Solution" << endl;
} else {
cout << m0 << " " << m1 << endl;
}
return 0;
}
这样的时间复杂度是O(1)的,因为只进行了有限次的运算和比较
原文地址: http://www.cveoy.top/t/topic/hQpQ 著作权归作者所有。请勿转载和采集!