九度OJ 题目1432:叠筐

时间:2022-08-04 06:38:42
内存限制: 128 兆        时间限制: 1 秒
题目描述:

把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。

输入:

输入是一个个的三元组,分别是,外筐尺寸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了好几次)