UVa 1605

链接:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4480

题意:

你的任务是设计一个包含若干层的联合国大楼,其中每层都是一个等大的网格。有若干国家需要在联合国大楼里办公,
你需要把每个格子都分配给其中一个国家,使得任意两个不同的国家都有一对相邻的格子(要么是同层中相邻的格子,要么是相邻层的同一个格子),
一个国家可以有多个相互连通的格子。你设计的大厦最多不能超过1000000个格子。
输入国家的个数n(n≤50),输出大楼的层数H、每层楼的行数W和列数L,然后是每层楼的平面图。不同国家用不同的大小写字母表示。

分析:

构造法。对于每个n都这样设计即可:

一共只有两层,每层都是 n*n 的,第一层第i行全是国家i,第二层第j列全是国家j。

代码:

 1 #include <cstdio>
 2 
 3 int main(){
 4     const char s[52+5] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 5     int T = 0, n;
 6     while(~scanf("%d", &n)){
 7         if(T++) printf("
");
 8         printf("2 %d %d
", n, n);
 9         for(int t = 0; t < n; t++){
10             for(int i = 0; i < n; i++) printf("%c", s[t]);
11             printf("
");
12         }
13         printf("
");
14         for(int t = 0; t < n; t++){
15             for(int i = 0; i < n; i++) printf("%c", s[i]);
16             printf("
");
17         }
18     }
19     return 0;
20 }
原文地址:https://www.cnblogs.com/hkxy125/p/8040209.html