este código genera un QR más bonito

que teóricamente con MUCHA suerte podría ser valido
-parece un QR real
-usa el array (3, tomando la idea de eferion)
-se ve bonito

ya queda de tu parte
lukaszg_15 leerlo y analizarlo
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main() {
int qr_pos[9][9] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 0, 0, 0, 0, 0, 1, 0},
{0, 1, 0, 1, 1, 1, 0, 1, 0},
{0, 1, 0, 1, 1, 1, 0, 1, 0},
{0, 1, 0, 1, 1, 1, 0, 1, 0},
{0, 1, 0, 0, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0}
};
int qr[21][21];
int num, c, i, j;
char salida[2]={' ',(char) 219};
srand(time(NULL));
for (i = 0; i < 21; i++) {
for (j = 0; j < 21; j++) {
qr[i][j] = rand() % 2;
}
}
for (i = 0; i < 8; i++) {
for (j = 0; j < 8; j++) {
qr[i][j] = qr_pos[i+1][j+1];
qr[i][j + 13] = qr_pos[i+1][j];
qr[i+13][j] = qr_pos[i][j+1];
}
}
for(i=7; i< 14; i++){
qr[6][i] = (i+1)%2;
qr[i][6] = (i+1)%2;
}
for (i = 0; i < 21; i++) {
for (j = 0; j < 21; j++) {
cout << salida[qr[i][j]] << salida[qr[i][j]];
}
cout << endl;
}
}