Szachownica z "X" i "." jak wykonać?

0

Jak wykonać szachownicę z x i . wyglądającą tak: xxx...
...xxx itd.
Zrobiłam kod do podstawowej szachownicy, ale nie potrafię go przekształcić żeby było tak.

for (int a = 0; a < i; a++)
{
    for (int b = 0; b < p; b++)
    {
        if ((a + b) % 2 == 0) std::cout << "X";
        else std::cout << '.';
    }
    std::cout << std::endl;
}
0

Pierwsza połowa jest jedna, druga połowa jest inna. Możesz to sobie rozbić na dwie niezależne pętle wewnętrzne (jedną do rysowania pierwszej, a drugą do drugiej połowy); możesz w ramach wspólnej pętli dokonywać sprawdzenia — czy aktualny iterator (u ciebie — b) jest większy czy nie od połowy rozmiaru (u Ciebie — p). To pierwszy warunek. Drugim jest to, żeby się zamieniały co wiersz — w wierszach parzystych masz jeden wzór, w nieparzystych przeciwny.

Jeśli nie wiesz, jak to od razu zapisać ładnie, możesz rozpisać sobie najpierw wszystkie cztery przypadki — parzysty wiersz, pierwsza połowa; parzysty wiersz, druga połowa; nieparzysty wiersz, pierwsza połowa; nieparzysty wiersz, druga połowa. A potem, jak już to Ci będzie działać, odpowiednio spiąć te warunki, dla krótszego i czytelniejszego kodu.

1

Jeżeli chodzi co o taką szachownicę:

.X.X.X.X
X.X.X.X.
.X.X.X.X
X.X.X.X.
.X.X.X.X
X.X.X.X.
.X.X.X.X
X.X.X.X.

To rozwiązaniem jest:

#include <stdio.h>
int main ()
{ int i, j, p;
  for (i = 0; i < 8; ++i)
  { p = i & 1 + 8;
    for (j = p - 8; j < p; ++j)
      putchar (j & 1 ? 'X' : '.');
    putchar ('\n');
  }
  return 0;
}
3

Zawsze można się pokusić o rozwiązanie jednolinijkowe ;)

const int dimensions = 8;
    
for(int i = 0; i < dimensions * dimensions; i++) i % (dimensions + 1) == 0 ? printf("\n") : (i % 2 == 0 ? printf("X") : printf("."));
5
const int size=8;
for(int y=0;y<size;++y,cout<<endl) for(int x=0;x<size;++x) cout<<"X "[(x+y)&1];
1
// (Debian 10.2.1-6) Code::Blocks 20.03 -std=c++14 or higher
// g++ -Wall -fexceptions -g -std=c++14 -c main.cpp -o main.o

#include <iostream>
#include <cmath>

using namespace std;

auto main()->int
{
    for(int i=log10(1),m=0x78,n=0x2E,g=32>>2;++i<=g*log2(256);cout<<(char)(n)<<(char)0x20,(i%g==0)?[](){cout<<(char)0x0A;}():[&](){m=m^n;n=m^n;m=m^n;}()){}

    cout<<(char)0x0A;
    return log10(1);
}
1

@Manna5: Jak już chcesz mieć krótsze i szybsze to:

#include <iostream>
using namespace std;

int main()
{
	for(int i=0;i<8*8;++i) cout<<" X"[1&(i^(i>>3))]<<("\n"+((i&7)!=7));
    return 0;
}
0

Podobny wątek był założony i rozwiązany nie dawno: Drukowanie szachownicy z wieloznakowymi komórkami.

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