Czytanie elementów tablicy na ukos

0

Witam, wróciłem do robienia kółka i krzyżyk i mam pytanie:

Da się jakoś zrobić pętle for która sprawdzała by kolejne elementy tablicy dwuwymiarowej na ukos?

1 3 6
2 5 8
4 7 9

Czyli było by kolejno 1, 2, 3, 4, 5.. itd.

dodanie znacznika <code> - furious programming

1

Można na przykład tak.
(pseudokod)

    const int sizeX = 3;
    const int sizeY = 3;
    int array[sizeX][sizeY];
    int c = 1;
    for(int i = 0; i < sizeX + sizeY - 1; ++i)
    {
        int y = i>=sizeY ? sizeY-1 : i;
        for(int x = i-y; x < sizeX && y >= 0; ++x, --y)
        {
            array[x][y] = c++;
        }
    }

dodanie znacznika <code class="java"> - furious programming

0

Dzięki :)

Nie za bardzo ogarniam jak to działa, ale działa

0

lub tak:

    const int sizeX = 3;
    const int sizeY = 3;
    int array[sizeX][sizeY];
    int sx=0,sy=0,x=0,y=0,c=0;
    while(true)
       {
        array[x][y]=c++;
        if((x>=sizeX)||(y<0))
          {
           if(sy<sizeY-1) ++sy;
           else if(sx<sizeX-1)  ++sx;
           else break;
           x=sy;
           y=sy;
          }
        else
          {
           ++x;
           --y;
          }
       }
1

To może wytłumaczę.
zmienna i może przyjmować wartości od 0 do 4 dla tablicy o rozmiarze 3x3
Te wartości odpowiadają polom tak jak pokazano na obrazku
http://screenshooter.net/100253651/ccopbyo
Czyli wystarczy wyliczyć y, który jest równy min(i, 2), żeby nie wychodził poza tablicę.
x jest równe reszcie, która pozostanie.
Dla wyliczonej pozycji przechodzimy po tablicy po skosie w kierunku ↗

Ta metoda działa też dla prostokątnych tablic.

0

Kurde, nie mogę poradzić sobie z odwróceniem kierunku sprawdzania...

Udało mi się tylko zrobić to od drugiej strony :/

		    for(int i = sizeX + sizeY - 2; i >= 0; --i)
		    {
		    	ileWLiniXUkos=0;
		        int y = i>=sizeY ? 2 : i;
		        
		        for(int x = i-y; x < 3 && y >= 0; ++x, --y)
		        { 

dodanie znacznika <code class="java"> - furious programming

1 użytkowników online, w tym zalogowanych: 0, gości: 1