标签:
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2074
题目大意:
打印一个两种花色层层交错的图形。给你最外环的尺寸N和两个字符表示花色A(中心
花色)、B(外环花色)。然后打印出这个图形。
思路:
用二维字符数组s[][]来存储图形。然后利用三重循环,一重k用来表示层数,剩下两重
表示第i行第j列的字符,将相应层数的字符存储进数组s[][]中,最后将它输出出来。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
char s[90][90];
int main()
{
int N;
char a,b;
int ok = 0;
while(cin >> N)
{
if(ok == 0)
ok = 1;
else
cout << endl;
memset(s,0,sizeof(s));
cin >> a >> b;
if(N == 1)
{
cout << a << endl;
continue;
}
int m = (N+1)/2; //层数
if(m&1)
swap(a,b);
for(int k = 1; k <= m; ++k)
{
for(int i = k; i <= N-k+1; ++i)
{
for(int j = k; j <= N-k+1; ++j)
{
if((i==1 && (j==1 || j==N)) || (i==N && (j==1 || j==N)))
s[i][j] = ' ';
else if(k&1 && (i==k||i==N-k+1))
s[i][j] = b;
else if(k&1 && (j==k||j==N-k+1))
s[i][j] = b;
else if(~(k&1) &&(i==k||i==N-k+1))
s[i][j] = a;
else if(~(k&1) && (j==k||j==N-k+1))
s[i][j] = a;
}
}
}
for(int i = 1; i <= N; ++i)
{
for(int j = 1; j <= N; ++j)
cout << s[i][j];
cout << endl;
}
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/lianai911/article/details/43614145