首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >乘以2,然后每三年乘以3

乘以2,然后每三年乘以3
EN

Stack Overflow用户
提问于 2017-10-31 15:06:14
回答 3查看 116关注 0票数 2

我正在做一项作业,任务是:

魔术植物

我们有一种神奇的植物,一旦它被种植,它就在第一年发芽并长出两片叶子。它的叶子每年翻倍,除了每隔三年它的叶子翻倍。

类似于:

代码语言:javascript
复制
Year:   1 | 2 | 3 |  4|  5| 6 |  7 …  
Leaves: 2 | 4 | 12| 24| 48|144|288 …

我到目前为止已完成的工作:

代码语言:javascript
复制
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.

6

9

15

我需要能够输入一年,找到一些叶子,以及拿出叶子的数量,看看有多老的植物。

EN

回答 3

Stack Overflow用户

发布于 2017-10-31 15:34:24

这个怎么样:

代码语言:javascript
复制
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);
}

将印刷:

代码语言:javascript
复制
2
4
8
24
48
96
288
576
...

测试代码这里

您可以使用mod或余数算子 (%),这对于这类任务非常方便。

我建议为您的变量使用更好的名称,因为从长远来看,它可能是有害的;使用自明的名称,比如numberOfLeaves,而不是nsixthYear,而不是l

利用这些知识,你可以得到树的年数,因为这是一项作业(我猜.)我不会把这方面的代码放在这里,但是我会给您一个方法的提示:在循环中减法,直到有零的叶子为止。

票数 0
EN

Stack Overflow用户

发布于 2017-10-31 15:54:24

代码语言:javascript
复制
   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);

}
票数 0
EN

Stack Overflow用户

发布于 2017-10-31 15:59:49

下面是一种递归的方法。

代码语言:javascript
复制
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表示年数,ret1访问树叶数)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47038595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档