[Java] Tablica o długości opartej o ciąg Fibonacciego

tami
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 20 kwie 2016, o 16:57
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[Java] Tablica o długości opartej o ciąg Fibonacciego

Post autor: tami »

Witam

Od 2 dni nurtuje mnie ćwiczenie z książki podanej w teamcie postu (Java ćw.12.5 książka Praktyczny kurs Java wyd.IV M.Lis — Afish). Brzmi ono następująco:

Ćwiczenie 12.5.
Utwórz tablicę dwuwymiarową, w której liczba komórek w kolejnych rzędach będzie równa dziesięciu kolejnym wartością ciągu Fibonacciego, poczynając od elementu o wartości 1 (1, 1, 2, 3, 5 itd.). Wartość każdej komórki powinna być jej numerem w danym wierszu w kolejności malejącej (czyli dla wiersza o długości trzech komórek kolejne wartości to 3, 2, 1). Zawartość tablicy wyświetl na ekranie.

Zadanie rozumiem następująco:

Kod: Zaznacz cały

tab[0] ->  1
tab[1] ->  1
tab[2] ->  2  1
tab[3] ->  3  2  1
tab[4] ->  5  4  3  2  1
tab[5] ->  8  7  6  5  4  3  2  1
tab[6] ->  13  12  11  10  9  8  7  6  5  4  3  2  1
tab[7] ->  21  20  19  18  ...                                 1                                          
tab[8] ->  34  33  32  31  ...                                        1
tab[9] ->  55  54  53  52  ...                                              1
Teraz pytanie czy da się to zorbić bez używania dodatkowych klas poza main'em, bo na tym etapie wspomnianej książki zostały przedstawione dopiero podstawy (instalacja, podstawy programowania) oraz instrukcje języka (zmienne, instrukcje sterujące, tablice).

Póki co z moich prób w obu doszzedłem do tego samego punktu przy którym nie wiem co dalej czynić, do odpowiednich wartości w komórkach też jeszcze nie dochodziłem z racji napotkanych problemów z odpowiednią długością wiersza :P

Kod: Zaznacz cały

//1 za pomocą dwuwymiarowej tabicy i tab pomocniczej:
class Cwiczenie_12_5_a
{
	public static void main(String args[])
	{
		int tabk[]=new int[10];
		tabk[0]=1;
		tabk[1]=1;
		
		int tab[][]=new int[10][];
		tab[0]=new int[1];
		tab[1]=new int[1];
		
		int licznik=1;
		
		for(int k=2;k<tabk.length;k++)
		{
			//tabk[k]=k<2 ? 1 : (tabk[k-2]+tabk[k-1]);
			tabk[k]=tabk[k-2]+tabk[k-1];
			for(int i=2;i<tab.length;i++)
			{
				//tab[i]=i<2 ? new int[1] : new int[tabk[k-2]+tabk[k-1]];
				tab[i]=new int[tabk[k-2]+tabk[k-1]];
				//tab[i]=new int[1];
				for(int j=0;j<tab[i].length;j++)
				{
					tab[i][j]=licznik;
				}
			}
		}
		/*
		for(int k=0;k<tabk.length;k++)
		{
			System.out.print("tabk[");
			System.out.println(k+1+"] = "+tabk[k]);
		}
		*/	
		for(int k=0;k<1;k++)
		{
			for(int i=0;i<tab.length;i++)
			{
				System.out.print("tab["+i+"] = ");
				for(int j=0;j<tab[i].length;j++)
				{
					System.out.print(tab[i][j]+" ");
				}
				System.out.println();
			}
		}
	}
}

Kod: Zaznacz cały

//2 za pomocą tablicy trójwymiarowej:
class Cwiczenie_12_5_b
{
	public static void main(String args[])
	{
		int tab[][][]=new int[10][10][];
		//int licznik;
		int licznik2=1;
		tab[0][0]=new int[1];
		tab[0][1]=new int[1];
		//tab[0]=new int[1];
		//tab[1]=new int[1];
		
		for(int k=0;k<tab.length;k++)
		{
			//tab[k]=k<2 ? 1 : (tab[k-2]+tab[k-1]);
			//tab[k]=tab[k-2]+tab[k-1];
			//licznik=k<2?1:tab[k-2]+tab[k-1];
			for(int i=0;i<tab[k].length;i++)
			{
				//licznik=k<2?1:(i-2+i-1);
				tab[k][i]=i<2 ? new int[1] : new int[i];/*[tab[i-2]+tab[i-1]];*/
				//tab[k][i]=new int[tab[k-2]+tab[k-1]];
				//tab[i]=new int[1];
				//System.out.print("tab["+k+","+i+"] = ");
				for(int j=0;j<tab[k][i].length;j++)
				{
					//tab[k][i][j]=licznik++;
					//System.out.print(tab[k][i][j]+" ");
				}
				//System.out.println();
			}
		}
		
		for(int k=0;k<1/*tab.length*/;k++)
		{
			for(int i=0;i<tab[k].length;i++)
			{
				System.out.print("tab["+k+","+i+"] = ");
				for(int j=0;j<tab[k][i].length;j++)
				{
					tab[k][i][j]=licznik2++;
					System.out.print(tab[k][i][j]+" ");
				}
				System.out.println();
			}
		}
	}
}
Nie bardzo wiem w jaki spsób zrobić aby długość wiersza była uzależniona od tab[i-1]+tab[i-2] czyli była wynikiem dodawania 2 wcześniejszych długości wiersza.

Jakieś pomysły, wskazówki?
Ostatnio zmieniony 21 kwie 2016, o 15:44 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Java] Tablica o długości opartej o ciąg Fibonacciego

Post autor: Afish »

Kod: Zaznacz cały

/* package whatever; // don't place package name! */
 
import java.util.*;
import java.lang.*;
import java.io.*;
 
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		int[][] tab = new int[10][];
		int a = 0;
		int b = 1;
		for(int i=0;i<10;++i){
			tab[i] = new int[b];
			for(int j=0;j<tab[i].length;++j){
				tab[i][j] = tab[i].length - j;
			}
			int c = a + b;
			a = b;
			b = c;
		}
 
		for(int i=0;i<10;++i){
			for(int j=0;j<tab[i].length;++j){
				System.out.print(tab[i][j]);
				System.out.print(", ");
			}
			System.out.println("");
		}
	}
}
tami
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 20 kwie 2016, o 16:57
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[Java] Tablica o długości opartej o ciąg Fibonacciego

Post autor: tami »

Dzięki wielkie, aż ciężko pomyśleć że wystarczyło zrobić to tak prosto, co ja się nawymyślałem przez te dni, a na to nie wpadłem:P
ODPOWIEDZ