具体题目记得不准,只能大概描述一下,有两个国家A和B,分别给出A国的GDP(21.43)、GDP增长率(0.023)、人口数(3.28)、人口增长率(0.015),B国的GDP(14.36)、GDP增长率(0.061)、人口数(14)、人口增长率(0.0033),假设每年的GDP增长率和人口增长率保持不变的情况下,多少年后两国的人均GDP相等。
这道题考察的是我高中学过的幂、对数运算操作和java Math运算类的掌握情况。
我们先感性的对这个题分析一下,A国的GDP比B国的高,人口数却比B国的少,就目前来说,A国人均GDP高于B国的人均GDP,但是,B国的GDP增长率高于A国,同时,人口增长率低于A国,所以多年后,是有可能两国人均GDP相等的。这个A国类比于美国,B国类比于中国。
首先复习一下幂和对数的概念:
一般地,在数学上我们把n个相同的因数a相乘的积记做a^n 。这种求几个相同因数的积的运算叫做乘方
,乘方的结果叫做幂
。在a^n 中,a叫做底数
,n叫做指数
。a^n读作“a的n次方”或“a的n次幂“
。
在数学中,对数是对求幂的逆运算,正如除法是乘法的逆运算,反之亦然。 这意味着一个数字的对数是必须产生另一个固定数字(基数)的指数。
如果a的x次方等于N(a>0,且a≠1),那么数x叫做以a为底N的对数(logarithm),记作x=loga N。其中,a叫做对数的底数,N叫做真数。
上图是运算过程,把这个运算过程转换成代码
package com.zy.algorithmtrain;
/**
* @Author zhongyili
* @Date 2022/1/10
*
* 具体题目记得不准,只能大概描述一下,有两个国家A和B,
* 分别给出A国的GDP(21.43)、GDP增长率(0.023)、人口数(3.28)、人口增长率(0.015),
* B国的GDP(14.36)、GDP增长率(0.061)、人口数(14)、人口增长率(0.0033),
* 假设每年的GDP增长率和人口增长率保持不变的情况下,多少年后两国的人均GDP相等。
*/
public class Algorithm1 {
public static void main(String[] args) {
float[] a = {21.43f, 0.023f, 3.28f, 0.015f};
float[] b = {14.36f, 0.061f, 14f, 0.0033f};
int result = algorithm1(a, b);
System.out.println("result = " + result);
}
private static int algorithm1(float[] a, float[] b) {
float value1 = (a[0] * b[2]) / (b[0] * a[2]);
System.out.println("value1 = " + value1);
float value2 = ((1 + b[1]) * (1 + a[3])) / ((1 + a[1]) * (1 + b[3]));
System.out.println("value2 = " + value2);
double result = Math.log(value1) / Math.log(value2);
return (int)result;
}
}
结果
value1 = 6.369744
value2 = 1.0492404
result = 38