砍树问题,为什么输出的是0呢,那个地方错了
#include <bits/stdc++.h>using namespace std;
int n,m;
const int N=1e6+10;
int a;
void putin()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a;
}
}
bool check(int k)
{
int sum=0;
for(int i=1;i<=n;i++)
{
if(k>a)sum+=k-a;
else sum+=0;
}
return sum;
}
void cut()
{
int l=1,r=1e9;
while(l<=r)
{
int mid=l+r>>1;
if(check(mid)>m)l=mid+1;//取多了,将H提高,保证是那个值
else if(check(mid)<m)r=mid-1;
else
{
cout<<mid;
return ;
}
}
cout<<r<<endl;
}
int main()
{
putin();
cut();
} bool check(int k)
{
int sum=0;
for(int i=1;i<=n;i++)
{
if(k>a[ i]) sum+=k-a[ i];
else sum+=0;
}
return sum;
}
在这个函数中,虽然返回类型是bool,但实际上它返回的是一个整数值。在C++中,0被视为false,非零值被视为true。因此,当 return sum; 语句执行时,如果sum为0,则会返回false,否则返回true。这会导致程序输出0,因为0被视为false。解决方法是将返回类型改为int,并根据实际情况返回true或false。
页:
[1]