Pętla For

0

Witam ma ktoś jakiś pomysł na takie zadanko: Używając tylko dwóch pętli for i znaku "#" narysować dwa kwadraty jeden w drugim:
screenshot-20190129173555.png
############

########

# #

# #

# #

########

############

1

W C++ to wyglądałoby jakoś tak: https://wandbox.org/permlink/PdJUG4laZUxFeVz3

1

Napisz metodę, która przyjmie dwa parametry x i y i zwróci # lub pusty String
coś w ten deseń:

  for(int i =0; i < szerokosc; i++){
    for(int j=0; j < wysokosc; j++){
        System.out.print(rysuj(i,j));
 }
}

Pamiętaj, nie używaj polskich nazw zmiennych - tutaj tylko przykład.

6

Ja do takich zadań podchodzę zazwyczaj tak:

  1. Co jest najłatwiej zrobić? W pierwszym i ostatnim wierszu mam same '#', czyli i == 0 || i == 6
    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 12; j++) {
            if (i == 0 || i == 6) {
                System.out.print('#');
            }
        }
        System.out.println();
    }
  1. Co dalej najłatwiej zrobić? Każda pierwsza i ostatnia kolumna też ma '#', czyli j == 0 || j == 11
    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 12; j++) {
            if (i == 0 || i == 6 || j == 0 || j == 11) {
                System.out.print('#');
            } else {
                System.out.print(' ');
            }
        }
        System.out.println();
    }
  1. Teraz zauważam, że w środku też mam taki śmieszny kwadrat, ale zawsze jest przerwa jednej komórki z przodu i z tyłu,
    czyli j != 1 && j != 10
for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 12; j++) {
            if (i == 0 || i == 6 || j == 0 || j == 11 || (j != 1 && j != 10)) {
                System.out.print('#');
            } else {
                System.out.print(' ');
            }
        }
        System.out.println();
    }
  1. Teraz zauważam, że muszę jakoś wyeliminować '#' ze środka wew. kwadratu, czyli dokładam do tego warunku j != 1 && j != 10 warunek na i, taki że j != 1 && j != 10 && (i == 1 || i == 5):
for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 12; j++) {
            if (i == 0 || i == 6 || j == 0 || j == 11 || (j != 1 && j != 10 && (i == 1 || i == 5))) {
                System.out.print('#');
            } else {
                System.out.print(' ');
            }
        }
        System.out.println();
    }
  1. Jedyne co nam zostało to domalować '#' po bokach wew. kwadratu, więc dokładamy kolejny warunek, czyli j == 2 || j == 9
for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 12; j++) {
            if (i == 0 || i == 6 || j == 0 || j == 11 || (j != 1 && j != 10 && (i == 1 || i == 5)) || j == 2 || j == 9) {
                System.out.print('#');
            } else {
                System.out.print(' ');
            }
        }
        System.out.println();
    }
  1. Teraz patrzysz na tego potwora i zastanawiasz się czy te warunki może się gdzieś zazębiają, czy można je jakoś uprościć, ale to już zostawiam Tobie (spoiler https://4programmers.net/Pastebin/10538)
0

Jesteście cudni! Biorę się za rozgryzienie tego i z tym będzie mi o wiele łatwiej to zrozumieć! Duży plus dla was! Dzięki
Dam znać jak uda mi się zrobić i jeśli coś będzie nie szło mam nadzieje, że pomożecie :)

0

Mi wyszło to tak, ale kolega Desu zrobił to ładniej.

		int width = 12;
		int height = 7;

		for (int i = 0; i < height; i++) {
			for (int j = 0; j < width; j++) {
				if(i==0||i==6||j==0||j==11||j==2||j==9||(j!=1&&j!=10&&i!=2&&i!=3&&i!=4))
					System.out.print("#");
				else
					System.out.print(" ");
			}
			System.out.println();
		}

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