【问题标题】:How to generate a right angle Fibonacci Series pyramid in Java?如何在 Java 中生成直角斐波那契数列金字塔?
【发布时间】:2017-01-30 12:25:52
【问题描述】:

我想生成这样的输出:-

0

0 1

0 1 1

0 1 1 2

0 1 1 2 3

0 1 1 2 3 5

但是,我正在尝试以这种方式实现,但缺少一些我无法破译的逻辑。

这是我正在尝试的:-

import java.util.Scanner;

class Fibonacci

{

public static void main(String arr[])

{

System.out.println("Enter a no.");

Scanner input=new Scanner(System.in);

int num=input.nextInt();

int x=0,y=1;

for(int i=0;i<=num;i++)

{

for(int j=0;j<i;j++)

{

System.out.print(j);

}

System.out.println("");

}

}

}

它会生成这样的输出(考虑 num=6)

0

0 1

0 1 2

0 1 2 3

0 1 2 3 4

0 1 2 3 4 5

需要什么逻辑才能获得所需的输出?如果有人能给我解释一下,将不胜感激:)

提前致谢!!

【问题讨论】:

  • 您实际上只是打印出当前的迭代。没有涉及斐波那契......你甚至期待什么?
  • 您正在打印出变量“j”,并且每次只在新的 for 循环中递增它。您实际上并没有在代码中计算斐波那契数列
  • en.wikipedia.org/wiki/Fibonacci_number 我不知道你为什么不直接谷歌这个。这类问题到处都有答案。
  • 我用谷歌搜索了这个,但我无法在我的代码中应用它。我什至尝试了不同的方法,但无法通过

标签: java for-loop logic fibonacci


【解决方案1】:

您需要通过将两个前一个数字添加到当前数字并像这样交换它们来改变内部循环的逻辑。

import java.util.Scanner;

class Fibonacci

{

    public static void main(String arr[])

    {

        int x = 0, y = 0, c = 0;

        System.out.println("Enter a no.");

        Scanner input = new Scanner(System.in);

        int num = input.nextInt();

        for (int count = 0; count < num; count++) {

            System.out.print(0);
            x = 0;
            y = 1;
            c = 0;
            for (int i = 1; i <= count; i++) {

                c = x + y;

                y = x;
                x = c;

                System.out.print(" " + c);
            }
            System.out.println();

        }
    }

}

【讨论】:

    【解决方案2】:
    1. 给出前两个数字0和1,无需计算。
    2. 使用String 保存上一行字符串。
    3. 计算下一个数字,将其添加到上一行字符串中。

    这是一个例子:

    int x = 0 , y = 1;
    
    int num = 6;
    
    System.out.println("0");
    System.out.println("0 1");
    
    String str = "0 1";
    
    for(int i = 2 ; i < num ; i ++){
        int amt = x + y ;
    
        x = y;
        y = amt;
    
        str += " " + amt;
    
        System.out.println(str);
    
    }
    

    【讨论】:

      【解决方案3】:

      在斐波那契数列中,仅提供前两个数字,即 0 和 1。该系列的下一个数字是通过添加最后两个数字来计算的。该系列由用户通过提供它想要的系列中的整数数量来限制。

      逻辑:创建斐波那契数列背后的逻辑是将两个整数相加并保存在一个新变量z = x+y中,然后将第一个整数值替换为第二个整数和第二个整数值通过他们的总和在系列中领先一步x=yy=z

      在您的问题中,您希望将系列打印在直角三角形中,因此您需要将已经打印的系列保存在字符串中

      int n = 10;
      System.out.println("0\n");
      System.out.println("0 1\n");
      int x = 0, y=1;
      int i=2, z=0;
      String str = "0 1";
      while(i!=10)
      {
          z = x+y;
          str += " " + z;
          x=y;
          y=z;
          i++;
          System.out.println(str);
      }
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2019-05-28
        • 1970-01-01
        • 2011-12-18
        • 2015-04-25
        • 2017-11-13
        • 2011-02-20
        • 2010-11-09
        • 2015-08-30
        • 1970-01-01
        相关资源
        最近更新 更多