Algorytm, c++.

0

Witam dostałem małe zadanko. Chodzi o to aby to tablicy 5 elementowej, z czego każdy element ma 5 elementów tab[5][5], wpisać takie coś.

00100
01010
10001
01010
00100

Czyli romb z jedynek, ale wykorzystując tylko 1 instrukcje przypisywania. No max 2.
Ale nie mam pomysłu na algorytm, z tego co widzę to dwie pętle for, zagnieżdzona jedna. Ale dalej nie mam pomysłu... NIE CHCE ROZWIĄZANIA TYLKO PODPOWIEDZI.

1

00100
01010
10001
01010
00100

A to takie coś to jest w pliku czy w pamięci?

Louen napisał(a)

Czyli romb z jedynek, ale wykorzystując tylko 1 instrukcje przypisywania. No max 2.

Mi to wygląda na blok cyfr, więc jezeli masz macierz o wymiarach 5x5 to chcesz wczytać same jedynki, czy wszystko?

Louen napisał(a)

z tego co widzę to dwie pętle for, zagnieżdzona jedna.

No i dobrze widzisz; Ile wymiarów macierzy - tyle pętli;

Wystarczy Ci dwie pętle i instrukcja przypisania wartości do odpowiedniego elementu;

Louen napisał(a)

NIE CHCE ROZWIĄZANIA TYLKO PODPOWIEDZI.

Podpowiedzi dają rozwiązanie; Pewnie i tak jak będziesz za dużo pytał dostaniesz gotowca (dla świętego spokoju...);

0

T[2n]=n%4 !=2

1

Wydaje mi się że dobrym rozwiązaniem może być wpierw wpisać 1 (3,2,1,2,3 pole) zaczynając od 3 a potem wpisać zera.

0

Hmmm. Nie mam tak to wpisać do tablicy. A wpisywać chcę tylko 1 w wyznaczony miejsce, tylko nie wiem na podstawie jakiego algorytmu. Ta macierz 5x5 to tablica.

0

Nie napiszę Ci w C++ (bo zbyt łatwo byś miał), ale w pascalu mogło by to wyglądać tak (jeśli masz ten blok zapisany w pliku i ilość liczb w nim się znajdujących zawsze jest stała (bo na to wychodzi z Twoich postów) i w takim samym formacie):

type
  TBlockArr = array [0 .. 4, 0 .. 4] of Boolean;

{...}

procedure LoadBlock(const sFileName: String; var aBlock: TBlockArr);
var
  fInput: TextFile;
  sBlockLine: String;
  I, J: Byte;
begin
  AssignFile(fInput, sFileName);

  try
    Reset(fInput);

    for I := 0 to 4 do
      begin
        ReadLn(fInput, sBlockLine);

        for J := 1 to 5 do
          aBlock[I][J - 1] := StrToBool(sBlockLine[J]);
      end;
  finally
    CloseFile(fInput);
  end;
end;

Rozgryź ten kod, przetłumacz go na C++, wyklucz konwersję typów i dodaj sprawdzanie, czy pobrana wartość jest jedynką czy zerem, zmień odczytywanie danych z pliku (żeby nie trzeba było pobierać łańcucha i z niego kopiować wartości); Ogólnie to pozmieniaj wszytko, to jest tylko wskazówka i celowo kod napisałem właśnie w ten sposób, żeby nie odebrać Ci przyjemności napisania go samemu :) ;

1
int t<:5:><:5:>; // :-\
int main(int*OO,int O0) <% 
int main(int OO,int*O0) <%
        if( OO ) <%
                main(00,&t);
                for( OO--; OO<031; OO++)<%
                        if( 00==OO%('('/'\b') ) puts("");
                        printf("%d", t<:OO/5:><:OO%5:>);%>
                return 00;%> 
        else 
                for(OO++;OO<014;OO++)
                        (OO<<!00)<:O0:> = OO%4!=(!00<<!00);%> 
0

zero przypisań

int t<:5:><:5:>;int main(int OO,int*O0){if(OO){main(00,&t);for(OO--;OO<031;OO++
)<%if(00==OO%('('/'\b'))puts(((char*)&OO)+!00);printf("%d",t<:OO/5:><:OO%5:>);}
return!OO;%>else for(OO++;OO<014;OO++)if(OO%04!=(!00<<!00))(OO<<!00)<:O0:>++;%>
1

Zero zrozumienia. :D

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