Con questo codice riesco a risolvere i due esempi posti sotto il problema.
Però ottengo 05/100…
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;
int main()
{
ifstream leggi("input.txt");ofstream scrivi("output.txt");
int N,K;
leggi>>N>>K;
bool change = true;
long int max= pow(N,K);
char stand[N][N];
char temp[max][max];
char m[max][max];
for(int i=0; i<max;i++){
for(int k=0;k<max;k++){
if(i<N && k<N){
leggi>>m[i][k];
temp[i][k]=m[i][k];
stand[i][k]=m[i][k];
}else{
}
}
}
for(int i=1;i<=K;i++){//as many times as k
change=!change;
for(int k=0;k<=pow(N,i);k++){//esamina le righe della matrice in riferimento
for(int j=0;j<= pow(N,i);j++){//esamina le colonne della matrice in riferimento
if(change==false){
if(m[k][j]=='.'){
for(int y=0;y<N;y++){
for(int x=0;x<N;x++){
temp[(k*N)+y][(j*N)+x]=stand[y][x];
}
}
}else if(m[k][j]=='*'){
for(int y=0;y<N;y++){
for(int x=0;x<N;x++){
temp[(k*N)+y][(j*N)+x]='*';
}
}
}
}else{
if(temp[k][j]=='.'){
for(int y=0;y<N;y++){
for(int x=0;x<N;x++){
m[(k*N)+y][(j*N)+x]=stand[y][x];
}
}
}else if(temp[k][j]=='*'){
for(int y=0;y<N;y++){
for(int x=0;x<N;x++){
m[(k*N)+y][(j*N)+x]='*';
}
}
}
}
}
}
}
for(int i=0; i<max;i++){
for(int k=0;k<max;k++){
scrivi<<m[i][k];
}
scrivi<<endl;
}
}