题目如图所示:
为了避免处理小数误差,将数据*100处理,二分查找找到测试长度,然后直到二分区间左右端点相邻,再测试哪个端点满足要求,最后换成保留2位小数处理。
如下:
//
// testb.c
// testB
//
// Created by ke tang on 2018/9/19.
// Copyright © 2018年 ke tang. All rights reserved.
//
#include <stdio.h>
#include "stdlib.h"
int numvalid (float,int,int,int*);
int numvalid (float mid,int n,int m,int* array)//测试当前测试长度是否可以满足截取数量的要求
{
int numof = 0;
for(int i=0;i<n;i++)
{
numof+=*array/mid;
array = array + 1;
}//numof表示可以截出的小木棍数量
if (numof >= m )
{
return 1;//表示当前测试长度可行,但也许有更长的测试长度能通过
}
else //测试长度过长
{
return 0 ;
}
}
int main()
{
int n,m;//n=给定木棍数量,m=要截出的小木棍长度
int i;
int *array;
int