情報学オリンピック一本通1070:人口増加|OpenJudge NOI 1.5 14:人口増加問題
4491 ワード
【タイトルリンク】
ybt 1070:人口増加OpenJudge NOI 1.5 14:人口増加問題
【問題点】
1.循環べき乗変数r初期値を1とする: ループn回毎に変数aを入力し、rの値をr*aとする: サイクル終了後、rはa n a^n an 2.乗方関数pow()を呼び出す(中に存在する)
3.(拡張)高速べき乗
【問題解きの考え方】
年間0.1%(0.001)の成長速度で増加することが知られています.最初のx億人1年後人口:x+x∗0.001=x(1+0.001)x+x*0.001=x(1+0.001)x+x∗0.001=x(1+0.001)x+x∗0.001=x(1+0.001)2年後人口:x(1+0.001)+x(1+0.001)+x(1+0.001)=x(1+0.001)2 x(1+0.001)+x(1+0.001)*0.001=x(1+0.001)*0.001=x(1+0.001)*0.001=x(1+x(1+0.001)+x(1+x(1+0.001+x(1+0.001)=x(1+x(1+x(1+0.001)=x+0.001)2 3年後人口:x(1+0.001)2+x(1+0.001)2∗0.001=x(1+0.001)3 x(1+0.001)^2+x(1+0.001)^2*0.001=x(1+0.001)^3 x(1+0.001)2+x(1+0.001)2∗0.001=x(1+0.001)3...n年後人口:x(1+0.001)nx(1+0.001)^nx(1+0.001)n後解決:数n乗を求める問題
【問題解決コード】
解法1:累乗を繰り返す
解法2:pow()関数の使用
ybt 1070:人口増加OpenJudge NOI 1.5 14:人口増加問題
【問題点】
1.循環べき乗
int r = 1;
r *= a;
double pow(double a, double b);
a b^b abを求める3.(拡張)高速べき乗
【問題解きの考え方】
年間0.1%(0.001)の成長速度で増加することが知られています.最初のx億人1年後人口:x+x∗0.001=x(1+0.001)x+x*0.001=x(1+0.001)x+x∗0.001=x(1+0.001)x+x∗0.001=x(1+0.001)2年後人口:x(1+0.001)+x(1+0.001)+x(1+0.001)=x(1+0.001)2 x(1+0.001)+x(1+0.001)*0.001=x(1+0.001)*0.001=x(1+0.001)*0.001=x(1+x(1+0.001)+x(1+x(1+0.001+x(1+0.001)=x(1+x(1+x(1+0.001)=x+0.001)2 3年後人口:x(1+0.001)2+x(1+0.001)2∗0.001=x(1+0.001)3 x(1+0.001)^2+x(1+0.001)^2*0.001=x(1+0.001)^3 x(1+0.001)2+x(1+0.001)2∗0.001=x(1+0.001)3...n年後人口:x(1+0.001)nx(1+0.001)^nx(1+0.001)n後解決:数n乗を求める問題
【問題解決コード】
解法1:累乗を繰り返す
#include
using namespace std;
int main()
{
int n;
double x;
cin>>x>>n;
for(int i = 0; i < n; ++i)
{
x *= 1 + 0.001;
}
cout<<fixed<<setprecision(4)<<x;
return 0;
}
解法2:pow()関数の使用
#include
using namespace std;
int main()
{
double x, n;
cin>>x>>n;
cout<<fixed<<setprecision(4)<<x * pow(1 + 0.001, n);
return 0;
}