乘以两,然后每三年乘以三

时间:2017-10-31 15:06:15

标签: java

我正在处理一项要求:

的作业

魔法植物

我们有一种神奇的植物,一旦种植,它就会在第一片叶子中发芽并长出两片叶子 年。它每年都会使它的叶子增加一倍,除了每三年它的叶子增加三倍。

类似的东西:

Year:   1 | 2 | 3 |  4|  5| 6 |  7 …  
Leaves: 2 | 4 | 12| 24| 48|144|288 …

到目前为止我完成了什么:

int n = 0;
int l = 6;

for(int i = 2; i>-1; i++) {
    if(i == l) {
        break;
    }
    if(i != l) {
        n = 2 * i;
    }
    if(i == l) {
        break;
    }
    if(i != l) {
        n = 3 * i;
    }
    System.out.println(n);
}

我的思考过程是检查它是否在第6年过去之前将它乘以2然后在第3年再增加3,然后重复。

这不起作用输出是:

3
6
9
15

我需要输入一年并找到一些叶子, 以及采取叶子的数量,并找出植物的年龄。

3 个答案:

答案 0 :(得分:0)

怎么样:

int years = 30; //number of years
long leaves = 0; //long is better because int will overflow faster

for(int i = 0 ; i < years ; ++i){
    if(i == 0)//first year
        leaves += 2;//adds 2 leaves
    else if(i % 3 == 0) //Every third year
        leaves *= 3; //triple leaves
    else//every other year
        leaves *= 2; //doubles leaves
    System.out.println(leaves);
}

将打印:

2
4
8
24
48
96
288
576
...

测试代码here

您可以使用mod or remainder operator(%),这对于此类任务非常方便。

我建议为变量使用更好的名称,因为从长远来看它可能是有害的;使用numberOfLeaves等自解释名称代替nsixthYear代替l

使用这些知识你可以获得树的年数,因为它是一个任务(对于同事我猜...)我不会把代码放到那里,但我会给你一个方法的提示这样做:在一个循环中减去,直到你的叶子为零。

答案 1 :(得分:0)

   public static void main(String [] args)
    {
     String years = "";
     String leave = "";
        int num_years = 10;
        int leave_count = 1;
        for(int i=1;i<= num_years;i++) {
            leave_count = (i%3 == 0)? leave_count * 3:leave_count*2; 
            years = years + i +"|";
            leave = leave + leave_count + "|";
        }
    System.out.println(years+"\n"+leave);

}

答案 2 :(得分:0)

这是一种递归方式。

private static int[] numberOfLeaves(int year) {
    if (year > 1) {
        if (year % 3 != 0) {
            int[] ret1 = new int[2];
            ret1[0] = ++numberOfLeaves(year - 1)[0];
            ret1[1] = numberOfLeaves(year - 1)[1] * 2;
            return ret1;
        } else {
            int[] ret2 = new int[2];
            ret2[0] = ++numberOfLeaves(year - 1)[0];
            ret2[1] = numberOfLeaves(year - 1)[1] * 3;
            return ret2;
        }
    }
    int[] ret = new int[2];
    ret[0] = year;
    ret[1] = year * 2;
    return ret;
}

经过测试。打印数据时,您应该通过索引访问它(ret [0]表示年数,ret [1]表示叶数。)