ACM程序设计选修课——1030: Hungar的时尚球场(水题+耐心)

1030: Hungar的时尚球场

Time Limit: 1 Sec  Memory Limit: 64 MB
Submit: 14  Solved: 8
[Submit][Status][Web Board]

Description

从NBA新秀训练中心回来以后,Hungar意识到自己的水平还不足以在NBA立足,于是他决定每天去球场练习

这天他来到一个球场,却发现这个球场十分破旧不堪,这让他无法忍受,在他看来这个球场应该是这样的:  球场的大小是n*n,而且这个球场应该被大写的英文字母所填充,填充规则是这样的,球场的最外面一圈用'A'填充,里面一圈用'B'填充,....., 直到球场被填满,如果填到'Z'棋盘还没 满的话,接下来用的就又是'A',B..以此类推

现在告诉你球场的大小,请告诉Hungar填满以后的球场是什么样子的。

Input

第一行一个整数T(T <=100), 代表有T组数据.

对于每一组数据,包含一个整数n(1 <= n <= 100).

Output

第一行输出Case #X: (不包括引号),X代表第X组数据

n行,每行n个字符,代表填充以后的球场.

Sample Input

2
2
3

Sample Output

Case #1:
AA
AA
Case #2:
AAA
ABA
AAA

题目本身很简单,就是需要耐心不停地调试来控制变量的范围。与HDU2074叠框很相似

,但又稍有不同。本想拿那道代码来当模版的,想想还是算了,简单的还是自己写吧。

写的比叠框那代码要好。简单易懂。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<set>
#include<map>
#include<sstream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
char list[600][600];
int n;
void change(const int &x,const int &y,const char &c)//按顺序包边上→,左↑,右←,右↓
{
	for (int i=x; i<=n-1-x; i++) 
	{
		list[x][i]=c;
	}
	for (int i=n-y-1; i>=y; i--)
	{
		list[i][y]=c;
	}
	for (int i=n-1-x; i>=x; i--)
	{
		list[n-1-x][i]=c;
	}
	for (int i=y; i<=n-1-y; i++)
	{
		list[i][n-1-y]=c;
	}
}
int main (void)
{
	int t,i,j;
	char c;
	cin>>t;
	for (int q=1; q<=t; q++)
	{
		memset(list,0,sizeof(list));//清空一下
		cin>>n;
		c='A';
		for (int i=0; i<=n/2; i++)
		{
			if(c>'Z')
				c-=26;
			change(i,i,c);
			c++;
		}	
		cout<<"Case #"<<q<<":"<<endl;
		for (int i=0; i<n; i++)
		{
			for (int j=0; j<n; j++)
			{
				cout<<list[i][j];
			}
			cout<<endl;
		}
	}	
	return 0;
}
原文地址:https://www.cnblogs.com/Blackops/p/5356410.html