这个是题目:
这个是我写的代码:
我用的是左闭右闭的方式
且是用向左取整
#include<stdio.h>
#include<stdlib.h>
int n; //n为巧克力数量
int check(int d,int k,int *a,int *b)
{
int i,num=0;
for(i=0;i<n;i++)
{
num=num+(a[i]/d)*(b[i]/d) ; //总长/小长==数量
}
if(num>=k) //说明够分 ,这个不太明白==,但是以后都这样写
return 1;
else
return 0; //这是不够分的
}
int main()
{
int k,i=0,l,r,min,mid;//n为巧克力数量,k为朋友数量
scanf("%d%d",&n,&k);
int a[k],b[k];//分别表示长和宽
r=1;
while(i<n)
{
scanf("%d%d",&a[i],&b[i]);
i++;
min=a[i]>b[i]?b[i]:a[i];
if(min>r)
{
r=min;
}
}
l=1;
while(l<=r)
{
mid=(l+r)>>1 ; //我一般都是使用向左取整
if(check(mid,k,a,b)==1)
{
l=mid+1;
}
else
{
r=mid-1;
}
}
printf("%d",l);
return 0;
}
但是我运行出来的答案是这样的:
我看了一下参考代码
是在最后打印那里不太一样,参考代码是这样的:printf("%d",l-1);
我一直理解不了为什么要减一呢?