///'使用C++写程序:学校新建了宿舍楼,共有 n 间寝室。等待分配的学生中,有女生 n//u0030位、男生 n//u0031位。所有待分配的学生都必须分到一间寝室。所有的寝室都要分出去,最后不能有寝室留空。//n现请你写程序完成寝室的自动分配。分配规则如下://n//n男女生不能混住;//n不允许单人住一间寝室;//n对每种性别的学生,每间寝室入住的人数都必须相同;例如不能出现一部分寝室住 2 位女生,一部分寝室住 3 位女生的情况。但女生寝室都是 2 人一间,男生寝室都是 3 人一间,则是允许的;//n在有多种分配方案满足前面三项要求的情况下,要求两种性别每间寝室入住的人数差最小。//n输入格式://n输入在一行中给出 3 个正整数 n//u0030、n//u0031、n,分别对应女生人数、男生人数、寝室数。数字间以空格分隔,均不超过 10//u0035。//n//n输出格式://n在一行中顺序输出女生和男生被分配的寝室数量,其间以 1 个空格分隔。行首尾不得有多余空格。//n如果有解,题目保证解是唯一的。如果无解,则在一行中输出 No Solution。//n//n输入样例 1://n24 60 10//n输出样例 1://n4 6//n注意:输出的方案对应女生都是 24/4=6 人间、男生都是 60/6=10 人间,人数差为 4。满足前三项要求的分配方案还有两种,即女生 6 间(都是 4 人间)、男生 4 间(都是 15 人间);或女生 8 间(都是 3 人间)、男生 2 间(都是 30 人间)。但因为人数差都大于 4 而不被采用。//n//n输入样例 2://n29 30 10//n输出样例 2://nNo Solution//n//n内容:题目要求将n0个女生和n1个男生分配到n个寝室中,满足以下条件://n1. 男女生不能混住;//n2. 不允许单人住一间寝室;//n3. 对每种性别的学生,每间寝室入住的人数都必须相同;//n4. 在有多种分配方案满足前面三项要求的情况下,要求两种性别每间寝室入住的人数差最小。//n//n根据题目要求,我们可以得到以下几个结论://n1. 对于男生寝室,每间寝室入住的人数应为n1/n;//n2. 对于女生寝室,每间寝室入住的人数应为n0/n;//n3. 如果n1/n和n0/n都是整数,说明可以满足前三项要求,同时人数差为0;//n4. 如果n1/n和n0/n都不是整数,那么只要满足前三项要求,人数差最小必然是1。//n//n根据上述结论,我们可以编写如下程序来解决问题://n//nc++//n#include <iostream>//nusing namespace std;//n//nint main() {//n int n0, n1, n;//n cin >> n0 >> n1 >> n;//n//n // 计算男生寝室每间寝室入住的人数//n int m1 = n1 / n;//n//n // 计算女生寝室每间寝室入住的人数//n int m0 = n0 / n;//n//n // 如果男生寝室或女生寝室每间寝室入住的人数不是整数,则无解//n if (n1 % n != 0 || n0 % n != 0) {//n cout << ///'No Solution///' << endl;//n } else {//n cout << m0 << ///' ///' << m1 << endl;//n }//n//n return 0;//n}//n//n//n这样的时间复杂度是O(1)的,因为只进行了有限次的运算和比较。//n//n///

C++程序:宿舍分配问题 - 优化分配方案

原文地址: https://www.cveoy.top/t/topic/pzwb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录