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
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
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();
}
}
}
}
tab[i-1]+tab[i-2]
czyli była wynikiem dodawania 2 wcześniejszych długości wiersza.Jakieś pomysły, wskazówki?