我的逻辑程序没有给出正确的输出?

时间:2014-10-22 05:56:54

标签: java spring

问题:

乌托邦树每年经历2个增长周期。第一个生长周期发生在春季,高度翻倍。第二个生长周期发生在夏季,当它的高度增加1米。 现在,一个新的乌托邦树苗在春天开始种植。它的高度是1米。在N个生长周期后你能找到树的高度吗?

输入格式 第一行包含一个整数,T,测试用例的数量。 T线跟随。每行包含一个整数N,表示该测试用例的周期数。

Constraints
1 <= T <= 10
0 <= N <= 60

输出格式 对于每个测试用例,在N个周期后打印Utopian树的高度。

//最后,希望如此......问题是什么......

初始价值是1 ..如果春天发生......它的价值将会加倍......这意味着......它将被2倍增加但是如果夏天发生它的价值将增加按1 ...

如果我提供输入:

2      //here 2 is the number of question..
0
1 

所以,输出必须是:

1
2

另一个例子,

输出样本:

2
3
4

因此,输入样本将是:

6
7
希望如此......你理解了什么问题,现在我们要把程序变成JAVA ....

好的,我进一步为此制作了一个节目..

package com.logical03;

import java.util.Scanner;

public class MainProgram{
    public static void main(String[] args){

        int num=1;
        int[] array=new int[100];
        Scanner in=new Scanner(System.in);

        System.out.println("Enter the number of Questions: ");
        int n_Elements=in.nextInt();

        System.out.println("Enter the values now: ");

        for(int i=1; i<=n_Elements; i++){
            array[i]=in.nextInt();
        }

        for(int i=1; i<=n_Elements; i++){

                if(array[i]==0){
                    System.out.println("\n1");
                }
                else{
                    for(int j=1; j<=array[i]; j++){
                        if(j%2!=0){
                            num=num*2;
                        }
                        else{
                            num=num+1;
                        }
                    }
                    System.out.println(num);
                }
            }
        }
    }

当我遇到这里..它将第二个问题添加到我的输出中..假设..

如果我输入的内容为:

2
3
4

因此,输出必须假设为:

6
7

哪个是对的!!

但我的程序输出为:

6
27 //which is incorrect..becoz it adds the sum of above number  :(

3 个答案:

答案 0 :(得分:2)

应该在内部父循环中声明

错误 - int num = 1;以刷新它的值。

public static void main(String[] args) {

        int[] array = new int[100];
        Scanner in = new Scanner(System.in);

        System.out.println("Enter the number of Questions: ");
        int n_Elements = in.nextInt();

        System.out.println("Enter the values now: ");

        for (int i = 1 ; i <= n_Elements ; i++) {
            array[i] = in.nextInt();
        }

        for (int i = 1 ; i <= n_Elements ; i++) {
            int num = 1;
            if (array[i] == 0) {
                System.out.println("\n1");
            } else {
                for (int j = 1 ; j <= array[i] ; j++) {
                    if (j % 2 != 0) {
                        num = num * 2;
                    } else {
                        num = num + 1;
                    }
                }
                System.out.println(num);
            }
        }
    }

<强>输出

Enter the number of Questions: 
2
Enter the values now: 
3
4
6
7

答案 1 :(得分:1)

我的方法是考虑到第一个循环(2 *高度)出现在赔率索引上,第二个cicle(1 +高度)出现在偶数索引上(从1到n(含)),起始索引0始终为1

return IntStream.rangeClosed(1, n)
            .reduce(1, (acc, idx) -> idx % 2 != 0 ? acc * 2 : acc + 1);

答案 2 :(得分:-2)

这是我的第一个贡献,只学习编码和解算算法,我必须找到一个可行的解决方案,简单地遵循代码信用http://www.javainterview.net/HackerRank/utopian-tree

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {

//receive input
        Scanner in = new Scanner(System.in);
        //no of test cases
        int T=in.nextInt();
        //no of cycles
        int[] N = new int[T];
        for(int i=0;i<T;i++){
            N[i]=in.nextInt();
        }

        int height=1;

        for(int i=0;i<N.length;i++){
            height=1;
            for(int j=1;j<=N[i];j++){
                if((j%2) ==1)
                    height=height*2;
                else
                    height++;
            }
            System.out.println(height);
        }
    }
}//this the end of the class