在科罗拉多州的一个保护区内释放了一只20只大角羊的繁殖组。预计经过仔细管理后,将在t年后给出绵羊数N,公式为:
N = 220 /(1 + 10(0.83)t) 一旦人口达到80岁,绵羊群体就能够在没有进一步监督的情况下自我维持。
编写一个程序(使用for循环),从零开始写出N的值,然后上升到25分。听到绵羊听了多少年?
这是我的代码:
import java.lang.Math;
class SheepHerd {
public static void main(String[] args){
for(double t = 0; t <= 25; t++) {
double N = 220 / (1 +10 * (Math.pow(.83, t)));
System.out.println(N);
}
}
}
终端向我显示了数字,我可以看到它需要9到10年,但我怎样才能获得确切的年份?
答案 0 :(得分:0)
由于您已经使用double
作为计数器,因此您可以尝试将其递增1,而不是像0.1这样的较小值:
for(double t = 0; t <= 25; t+=0.1) {
double N = 220 / (1 +10 * (Math.pow(.83, t)));
if (N >= 80) {
System.out.println(N + " sheep after " + t + " years");
break;
}
}
通过这种方式,您可以调整所需的时间粒度,但随着每个步骤进入更精确的方向,计算时间会更长。
答案 1 :(得分:0)
在System.out.println(N);
之后添加If (N >= 80)
break;
这将导致程序在达到目标编号(80)后退出循环。
最初的问题是询问多少年,所以我们只能假设它要求整整几年。在第9年,你将没有足够的羊,所以它不能是第9年。它必须是10年级。
答案 2 :(得分:0)
您可以解决t
的等式(或让其他人为您执行此操作:Wolfram alpha solution)并实施生成的公式:
class SheepHerd
{
public static void main(String[] args)
{
for (double t = 0; t <= 25; t++)
{
double N = 220 / (1 + 10 * (Math.pow(.83, t)));
System.out.println(
"for t=" + t + " result is " + N +
" check: " + computeYears(N));
}
System.out.println(computeYears(80));
}
public static double computeYears(double N)
{
double a = Math.log(22.0 / N - 0.1);
double b = Math.log(100.0 / 83.0);
return -a / b;
}
}
答案 3 :(得分:0)
你绝对可以反转这个功能。如果我的数学并没有让我失望,那就是:
a
N = -------------
1 + b * c^t
1 / a \
c^t = --- * | --- - 1 |
b \ N /
/ \
1 | / a \ |
t = ------- * | lg | --- - 1 | - lg(b) |
lg(c) | \ N / |
\ /
在您的案例中a = 220
,b = 10
,c = .83
,并获得t
的确切值。