题意:
有n个国家,要设计一栋长方体的大楼,使得每个单位方格都属于其中一个国家,而且每个国家都要和其他国家相邻。
分析:
紫书上有一种很巧妙的构造方法:
一共有2层,每层n×n。一层是每行一个国家,另一层是每列一个国家。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 50; 7 char b[2][maxn][maxn]; 8 9 char ToChar(int x) 10 { 11 if(x < 26) return 'a' + x; 12 else return 'A' + x - 26; 13 } 14 15 int main() 16 { 17 int n; 18 while(scanf("%d", &n) == 1) 19 { 20 printf("2 %d %d\n", n, n); 21 for(int i = 0; i < n; ++i) 22 { 23 char c = ToChar(i); 24 memset(b[0][i], c, sizeof(b[0][i])); 25 for(int j = 0; j < n; ++j) b[1][j][i] = c; 26 } 27 28 for(int h = 0; h < 2; ++h) 29 { 30 for(int i = 0; i < n; ++i) 31 { 32 for(int j = 0; j < n; ++j) 33 putchar(b[h][i][j]); 34 puts(""); 35 } 36 if(!h) puts(""); 37 } 38 } 39 40 return 0; 41 }