算法笔记-木棒分割

算法笔记-木棒分割

#include
#include
#include
using namespace std;
int f(int a[],int mid)
{
	int sum=0;
	for(int i=0;i<3;i++)
	{
		sum+=a[i]/mid;
		
	}
	return sum;
}
int binarySearch(int a[],int left,int right,int k)
{
	int mid;
	while(left<right)
	{
		mid=left+(right-left)/2;
		if(f(a,mid)<k)
		{
			right=mid;
		}else{
			left=mid+1;
		}
	}
	
	return left-1;
}
int main()
{
	int a[3]={10,24,15};
	
	sort(a,a+3);
	int k;
	scanf("%d",&k);
	int mid=binarySearch(a,0,a[2],k);
	printf("%d\n",mid);
	printf("第一段分为:%d,第二段分为:%d,第三段分为:%d",a[0]/mid,a[1]/mid,a[2]/mid);
	return 0;
	
 } 

代码小白,每天坚持写一点点,记录一下,希望有所收获。
这个题目利用了二分法,找出的是最后一个满足该条件的位置。该点往前的都满足,找到第一个num 做的时候,sum必须要赋值为零才会得到正确的结果,好奇怪。

你可能感兴趣的:(c++,算法)