- 题目描述:
-
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
- 输入:
-
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
- 输出:
-
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
- 样例输入:
-
11 B A
5 @ W
- 样例输出:
-
AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
AAAAAAAAA
@@@
@WWW@
@W@W@
@WWW@
@@@
-
本题思路:
先定义二维数组,再由内到外一圈一圈填充字符,最后去掉四个角。
# include <iostream>
# include <string.h>
using namespace std;
int main()
{
int n,m,i,j;
char IN,OUT;
while(cin>>n>>IN>>OUT&&n>0&&n<80&&n%2!=0)
{
char pic[n+1][n+1],K;
int f=0;
for(m=(n+1)/2;m>=1;m--)//由最内层框开始循环
{
f++;//f用来计数框数的奇偶
if(f%2==1) K=IN;
else if(f%2==0) K=OUT;
for(i=m;i<=n+1-m;i++)//分别按行、列 成圈填充
{
pic[m][i]=K;
pic[n+1-m][i]=K;
pic[i][m]=K;
pic[i][n+1-m]=K;
}
}
if(n!=1)
{
pic[1][1]=' ';pic[1][n]=' ';pic[n][1]=' ';pic[n][n]=' ';
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<pic[i][j];
cout<<endl;
}
cout<<endl;
}
}
/**************************************************************
Problem: 1432
Language: C++
Result: Accepted
Time:10 ms
Memory:1520 kb
****************************************************************/
Tips:
1.本题要注意框数为1时,边角不需打磨;
2.“叠筐与叠筐之间应有一行间隔”指的是整个叠筐输出完后有一行间隔。(在这里PE了好几次)