Последовательность Фибоначчи в массиве - PullRequest
0 голосов
/ 04 февраля 2012

Я ищу четкое объяснение моего вопроса (НЕ ищу код), но если немного кода поможет объяснить себя, тогда, пожалуйста, спасибо ..)

Вопрос:

-использование Java

-Основной класс запрашивает у пользователя целочисленный ввод (термин Фибоначчи N), затем переходит к вычислению всех чисел Фибоначчи по порядку, пока не достигнет этого термина.

-все хранится в одном массиве, типа integer.(Каждая цифра разбита и хранится в своем собственном индексе, так что это, так сказать, собственный «элемент».)

Например, я стремлюсь к тому, чтобы она выглядела примерно так:

"Пожалуйста, введите термин N Фибоначчи:"

10

На данный момент, внутренне, я сохранил 2 базовых случая в массиве данных, которые выглядят так:

ArrayList: [1, 1]

Теперь я пытаюсь сделать так, чтобы мой arraylist выглядел так, после ввода пользователем:

[1, 1, 2, 3, 5, 8, 1, 3, 2, 1, 3, 4, 5, 5]

(обратите внимание, как это прекратилось в последний срок, 55, а также обратите внимание, как двузначные значения разбиты на отдельныеэлементы.)

У меня нет проблем с разбивкой цифр, это просто "расчет", который доставляет мне затруднения ... заранее спасибо за любой совет

Ответы [ 8 ]

2 голосов
/ 04 февраля 2012

Я бы сгенерировал значения Фибоначчи, используя значения int, и использовал бы эти результаты, чтобы разбить цифры для добавления в ArrayList.

1 голос
/ 12 июня 2013

Я думаю, что это должно тренировки.

package p1;

import java.util.ArrayList;

public class NEWtEST {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList a =new ArrayList();

        a.add(0);// enter the 1st elemnt of the list
        a.add(1);// 2nd elemnt
        int currIndex=1;
        while(currIndex<50)//--- i set the limit as first 50 items
        {
            a.add(((Integer)a.get(currIndex))+((Integer)a.get(currIndex-1)));
            currIndex++;
            System.out.print(a.get(currIndex)+ " ");
        }
    }

}
1 голос
/ 29 марта 2012

Ниже приведен способ создания массива строк.Причина для и меньше чем 46 заключается в том, что именно такова длина инициализированного публичного массива, и вы не можете изменить длину вне инициализации.Вы можете просто изменить то, что в ней есть.Кроме того, фактически для чисел Фибоначчи типа int для использования их значения, если вы попытаетесь использовать что-либо выше 46-го числа Фибоначчи, оно выйдет за пределы максимального значения для целого числа.Если вы используете long его, если вы пытаетесь использовать что-то выше 92-го числа Фибоначчи, оно выйдет за пределы максимального значения для long.

public static void fibsmake(int num) {
    fibsreallength= num;
    int initial = 0; 
    int addtoinitial = 1;
    int keepinitial = 0;

    for(int i = 0; i<num&&i<46; i++) {
        keepinitial = initial;
        initial = addtoinitial;
        fibs[i]=keepinitial+"+"+initial;
        addtoinitial = keepinitial + addtoinitial;
    }
}


public static String fibs[]={"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""};
1 голос
/ 29 марта 2012

Что ж, когда я попытался скопировать объект Arraylist, он обнаружил синтаксическую ошибку, а в другом ответе на это не было достаточно кода, чтобы показать, что он на самом деле будет делать.В любом случае, хотя задание, которое дал вам ваш учитель, является своего рода пустой тратой программирования.Ниже приводится кое-что, что даст вам значение для чисел Фибоначчи.num - это какое число Фибоначчи в серии Фибоначчи, которое вы хотите.Например, если вы хотите шестое число Фибоначчи в ряду, вы должны поставить fibi (6), когда вы его вызываете.

public static int fibi(int num)
{
    int initial =0; int addtoinitial = 1;
    int keepinitial = 0;

    for(int i = 0; i <num; i++)
    {
        keepinitial = initial;
        initial = addtoinitial;
        addtoinitial = keepinitial + addtoinitial;
    }

    return initial;

} 

Способ, которым вы можете изменить его, чтобы получить массив строк, но сейчас мне нужно пойти на обед

1 голос
/ 04 февраля 2012

Звучит так, будто вы хотите пройти последовательность Фибоначчи, начиная с F1, добавляя цифры в виде целых чисел к ArrayList<int> по мере продвижения. Поскольку вам нужны цифры в base-10, я думаю, что это будет проще всего прочитать, если вы преобразуете промежуточные целые числа Фибоначчи в строки, а затем просматриваете каждый символ в строке как массив символов. По мере продвижения по ней вы можете преобразовать каждую цифру обратно в целое число, вычитая из нее символ «0». Затем вы можете добавить числовую версию этой цифры к ArrayList<int>. Конечный результат будет выглядеть примерно так:

ArrayList<int> arrayList = new ArrayList<int>();

int a = 1;
int b = 0;
int n = 1;

while (n++ <= input) {  // input being from the user
    a += b;
    b = a - b;

    char[] fib = Integer.toString(b).toCharArray();
    for (int i = 0; i < fib.length; i++) {
        arrayList.add(fib[i] - '0');
    }
}

Вывод здесь заключается в том, что вы не возитесь с вашими числовыми значениями, когда идете вверх по последовательности Фибоначчи. Вместо этого вы кешируете копию «b», которую вы преобразуете в строку, прежде чем определить значение каждой цифры, которая войдет в ArrayList<int>.

0 голосов
/ 27 февраля 2019
    public static void main(String[] args) {
        List<Integer> numList = new ArrayList<>();

        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter the size of the list:\n");
        int userInput = sc.nextInt();
        System.out.println("Your choose is"+" "+userInput);

        int a = 0;
        int b = 1;
        int c = 0;

        while(c<userInput) {
            c = a + b;
            a = b;
            b = c;

            numList.add(c);
        }

        System.out.println("Fibonacci list:"+" "+numList);
    }
0 голосов
/ 21 июня 2012

Я не умею объяснять.Но я думаю, что этот код может удовлетворить ваши требования.

import java.util.*;

public class Fibonacci {

        public static void main(String[] args) {
                long temp1=0;
                long temp2=1;
                long temp3;
                int temp4;
                //number of elements to generate in a series
                Scanner sc = new Scanner(System.in);
                ArrayList<Integer> list = new ArrayList<Integer>();
                System.out.println("Enter Number ");
                int num = sc.nextInt(); 
                if(num==0)
                list.add(0);
                else if(num==1)
                list.add(1);
                else 
                {
                    list.add(0);
                    list.add(1);
                //create the Fibonacci series and store it in an arraylist
                for(int i=1; i < num; i++){
                    temp3= temp1+temp2;
                    temp1= temp2;
                    temp2=temp3;
                    do{
                        temp4=(int) temp3%10;
                        temp3= temp3/10;
                        list.add(temp4);
                    }while(temp3!=0);
                }
                }
                //print the Fibonacci series numbers

                System.out.println("Fibonacci Series upto " + num);
                System.out.print(list);

        }
}
0 голосов
/ 04 февраля 2012
  1. Напишите классическую (просто сделанную нерекурсивную для Java) функцию Фибоначчи.

  2. ОК, вы не хотите, чтобы fib (N), поэтому измените тест вашего цикла так, чтобы он продолжался до достижения> = N.

  3. Кроме того, вы не хотите возвращать int, но ArrayList. Поэтому создайте его в своей функции, добавьте к нему в своем цикле и верните.

  4. О, ты тоже хочешь сделать эту странную цифру. Не меняйте свою функцию с # 3; вместо этого используйте его, чтобы получить ArrayList чисел Фибоначчи, а затем выполнить итерацию по нему, добавив цифры в новый ArrayList.

Альтернатива # 4, если Nishant верен: цикл из индекса 2 ArrayList, возвращаемого # 3, и обратный взгляд, как в

sums.add("1");
sums.add("0+1");
for (int i = 2; i < fibs.size(); i++)
  sums.add(fibs.get(i - 2).toString() + "+" + fibs.get(i - 1));

'Конечно, в этом случае вы можете продолжить редактирование вашей исходной функции Фибоначчи и пропустить создание fibs ArrayList.

...