1.這道題我是用公式寫的
首先介紹log函數
引入#include<cmath>
以e爲底:log(exp(n))
以10爲底:log10(n)
以m爲底:log(n)/log(m)
那麼求10000階乘我們只需要從log10(1)+........+log10(10000)向上取整即可,按照這個思路就很好寫了,貼代碼了
#include<bits/stdc++.h>
using namespace std;
double c;
int x;
int main()
{
for(int i=1;;i++)
{
c+=log10(i);
if(c>=9999)
{
x=i;
break;
}
}
cout<<x<<endl;
return 0;
}
2.這道題開始想了很久,一直不知道怎麼寫,後來看到期望我就來一個一個的分析期望,最高的炮臺明顯期望是1,最低的是1/2019,那麼來分析中間的期望,只考慮比當前炮臺高的炮臺,因爲比當前炮臺還矮的話無法對期望產生任何影響,比如考慮第四高的炮臺,有三個炮臺比他高,那麼有四個位置,接下來要考慮4個位置是否等可能,我是這麼想的,不一定對,可能性的大小是由炮臺之間的炮臺的個數決定的,又因爲沒有任何限制,所以每個位置的可能性都是相同的,那麼結果就很好算了。
#include<bits/stdc++.h>
using namespace std;
double c;
int main()
{
for(int i=1;i<=2019;i++)
c+=1.0/i;
printf("%.4lf",c);
return 0;
}