解题思路:
此题应运用二分答案 1.输入n,k; 2.输入每条网线的长度(给每个网线乘100变成整数); 3.在写一个while循环进行二分答案; 先定义两个数l,r分别代表最小值和最大值; 然后再循环内定义mid表示最小值和最大值的平均数; 在定义一个数z,表示网线可以分成多少段; 用一个for循环来计算网线可分成几段; 再用if语句来比较z和k(现在网线分成的几段和想得到的网线长度作比较); 如果z<k则r=中间数-1; 否则l=中间数+1; 4.循环结束后r=r/100(表示答案); 5.最后输出
注意事项:
1.数组,l,r都需定义成double类型; 2.记住要给每个网线乘100变成整数;
参考代码:
#include<bits/stdc++.h> using namespace std; int n,k;double a[1000005]; int main(){ cin>>n>>k; for(int i=1;i<=n;i++){ cin>>a[i];a[i]*=100; } double l=1,r=10000000; while(l<=r){ int mid=(l+r)/2; int z=0; for(int i=1;i<=n;i++)z+=a[i]/mid; if(z<k) r=mid-1; else l=mid+1; } r/=100; cout<<fixed<<setprecision(2)<<r; return 0; }
0.0分
2 人评分
C语言训练-斐波纳契数列 (C语言代码)浏览:1174 |
A+B for Input-Output Practice (VII) (C++代码)浏览:615 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:867 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:1229 |
数列问题 (C语言代码)浏览:1022 |
JAM计数法 (C语言代码)浏览:671 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:393 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:1326 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:612 |
【亲和数】 (C语言代码)浏览:695 |