题目
测试样例
输入样例 1:
24 60 10
输出样例 1:
4 6
注意:输出的方案对应女生都是 24/4=6 人间、男生都是 60/6=10 人间,人数差为 4。满足前三项要求的分配方案还有两种,即女生 6 间(都是 4 人间)、男生 4 间(都是 15 人间);或女生 8 间(都是 3 人间)、男生 2 间(都是 30 人间)。但因为人数差都大于 4 而不被采用。
输入样例 2:
29 30 10
输出样例 2:
No Solution
我的思路
按照题目意思,显然是找女生人数的因子(1除外),利用循环,从2开始逐步寻找女生人数的因子,而男生每间寝室的人数便是,男生总人数/(总寝室数-女生寝室数),对于这点方便理解,重点在于,寝室不允许但人住一间,这一点怎么限制呢,我的想法是,对女生来说,如果女生当前分配的寝室数等于女生总人数,对男生来说,总寝室数-女生寝室数等于男生总人数,那么此时就会造成,男生或者女生单人一间寝室,而对于两种性别每间寝室入住的人数差最小,只需要将每次循环的得出的结果,与已经保存的最小差值比较即可。
我的代码
#include<stdio.h>
#include<math.h>
int main(){
int n0,n1,n;
scanf("%d %d %d",&n0,&n1,&n);
int a,b;
int flag=0;
int i=0;
int solution=0;
for(i=1;i<=n-1;i++){
if(n0%i==0&&i!=n0){
if(n1%(n-i)==0&&(n-i)!=n1){
solution=1;
if(flag==0){
a=i;
b=n-i;
flag=1;
}
if(abs(n0/(i)-n1/(n-i))<abs(n0/a-n1/b)){
a=i;
b=n-i;
}
}
}
}
if(solution==1) printf("%d %d",a,b);
else printf("No Solution");
return 0;
}