Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 77090 | Accepted: 15630 |
Descriptionios
Inputgit
Outputpromise
Sample Inputide
4 11 8.02 7.43 4.57 5.39
Sample Output函数
2.00
Sourcethis
#include<iostream> #include<cstdio> using namespace std; int n,k; const int maxn=10010; int a[maxn]; int check(int x){ int s=0; for(int i=1;i<=n;i++) s=s+a[i]/x; if (s>=k)return 1; else return 0; } int main(){ cin>>n>>k; double x; int temp0; for(int i=1;i<=n;i++){ cin>>x; a[i]=x*100; } int l=0,r=10000000,mid; while (l<r){ mid=(l+r+1)/2; if(check(mid))l=mid; else r=mid-1; } printf("%.2lf\n",l/100.0); return 0; }
2.实数二分spa
赵老师,这个题为何要用floor函数呀
|
不加它还不对,这是考查的什么呢
|
像这种题目怎么判断何时用,round或者floor或者ceil呢,它根本没作具体说明
|
若是答案是2.458的话,保留两位的话正确的答案应该是2.46仍是2.45?
|
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int n,k; const int maxn=10010; double a[maxn]; int check(double x){ long long s=0; for(int i=1;i<=n;i++) s=s+int(a[i]/x); if (s>=k)return 1; else return 0; } int main(){ cin>>n>>k; float x; for(int i=1;i<=n;i++){ cin>>a[i]; } double l=0,r=1000000,mid; for(int i=1;i<=100;i++){ mid=(l+r)/2; if(check(mid))l=mid; else r=mid;//由于是实数。 不能减1. } printf("%.2lf\n",floor(100*l)/100); return 0; }
疑问?本题为何不能用int输出呢?固然能够,但不能这样写: printf("%.2lf\n",int(100*l)/100);而能够这样printf("%.2lf\n",int(100*l)/100.00);3d
知识补充:int强制类型转换\取整函数floor() ceil() round()函数的区别code
知识:在C++的头文件中有floor()和ceil()函数。在STL中还有round()函数。这三个函数的做用以下:
blog
从函数说明中能够看出,
(1) Floor()会取不大于自变量的最大整数,这样自变量是3.1或3.9是没有区别的,返回都是3;自变量是-2.1或-2.9也是没有区别的,返回都是-3;
(2) Ceil()会取不小于自变量的最大整数,这样自变量是3.1或3.9,返回都是4;自变量是-2.1或-2.9,返回的都是-2;
(3) Round()函数,才是咱们须要的四舍五入的函数,由于它会返回离自变量最近的整数,这个返回的整数可能大于也可能小于原来的数,可是必定是离它最近的那个整数。
注:floor(), ceil()函数都包含在头文件“Math.h”中,可是round()函数未包含在该头文件中。所以能够经过以上的原理,来本身实现round()函数,实现含有小数的数字的四舍五入。
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int main(){ double k=-5.9999;//5.999 cout<<int(k*1000)<<endl; cout<<floor(k*1000)<<endl; printf("%.0lf\n",k*1000); return 0; }
C/C++中使用int强制类型转换和floor函数有区别吗?
一、int是向0取整,好比:1.9会变成1,-1.9会变成-1
floor是向下取整,好比:1.8会变成1,-1.1会变成-2(注意这点和int不一样)
二、返回值类型也有区别。如下是floor的原型:
float floor( float arg );
double floor( double arg );
long double floor( long double arg );
double floor( Integral arg ); (C++11)
因而可知,floor返回的值是浮点型,而(int)返回的值是整型。
floor 返回小于或者等于指定表达式的最大整数 而int只返回整数部分 例如:假设a=3.2 用floor和int都是3,可是当a=-3.2的时候floor(a)返回的是-4,而(int)(a)返回的是-3;