洛谷 P1577

整数二分 不进位保留n位小数

#include <bits/stdc++.h>
using namespace std;
int n, k;
double rope[10010];
double l, r, mid;
char s[100];
inline bool check(double x)
{
    int num = 0;
    for (int i = 0; i < n; i++)
    {
        num += int(rope[i]/mid);
    }
    return num >=k;
}

int main()
{
    scanf("%d%d", &n, &k);
    for (int i = 0; i < n; i++)
    {
        scanf("%lf", &rope[i]);
        r = max(r,rope[i]);
    }
    while (r-l > 0.0001)
    {
        mid = (l+r)/2;
        if (check(mid))
        {
            l = mid;
        }
        else
        {
            r = mid;
        }
        
    }
    //printf("%lf  %lf\n",l,r);
    sprintf(s+1,"%.3f",l);
    s[strlen(s+1)]='\0';
    printf("%s",s+1);
    system("pause");
    return 0;
}

C 库函数 int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串,例:

#include <stdio.h>
#include <math.h>

int main()
{
   char str[80];

   sprintf(str, "Pi 的值 = %f", M_PI);
   puts(str);
   
   return(0);
}