Как проверить массив на наличие чисел Фибоначчи и выписать их?
Есть массив из 20 рандомных чисел в диапазоне (1-100). Проверить массив на наличия чисел Фибоначчи, если есть - выписать!
Результат моей программы(например):
5 6 8 12 15 17 // рандомные числа
Числа Фибоначчи:
5 6 8 12 15 17 // выписывает то же самое
Подскажите, что не так? Алгоритм по нахождению чисел вроде в порядке, может вывожу как то не так?
package pack;
import java.util.Scanner;
public class TablicaLiczb2 {
Scanner scanner = new Scanner(System.in);
private int[] tab;
public TablicaLiczb2 (int n) {
this.tab = new int[n];
}
public void wczytaj () {
for (int i = 0; i < tab.length; i++) {
//this.tab[i]=scanner.nextInt();
tab[i] = ((int)(Math.random()*101)-1);
}
}
public void wypisz() {
for (int x: tab) {
System.out.print(" " +x);
}
}
private boolean liczbyFibonacciego (int x){
int x1 = 1;
int y1 = 1;
for (int i = 3; i < x; i++) {
y1 = x1 + y1;
x1 = y1 - x1;
}
return true;
}
public void wypiszFibonacciego() {
for (int i=0;i<tab.length; i++) {
if(liczbyFibonacciego(this.tab[i])) {
System.out.printf(" " +this.tab[i]);
}
}
}
}
package pack_main;
import pack.TablicaLiczb2;
public class Main {
public static void main(String[] args) {
TablicaLiczb2 t = new TablicaLiczb2(10);
System.out.println("Liczby losowe: ");
t.wczytaj();
t.wypisz();
System.out.println("\n-------------");
t.wypiszFibonacciego();
}
}
Ответы (1 шт):
Автор решения: tym32167
→ Ссылка
пример на C#, но вы легко его переведете на java
Получим все числа фибоначчи до 100
HashSet<int> getFib(int max)
{
var ret = new HashSet<int>();
int x1 = 0;
int x2 = 1;
ret.Add(x1);
ret.Add(x2);
while (x2 <= max)
{
ret.Add(x2);
(x1, x2) = (x2, x1 + x2);
}
return ret;
}
Фильтруем числа и выводим на консоль
var fibs = getFib(100);
var myArray = new int[] {5, 6, 8, 12, 15, 17};
for(int i=0; i<myArray.Length; i++)
{
if (fibs.Contains(myArray[i]))
Console.WriteLine(myArray[i]);
}
Результат
5
8