题目1432:叠筐
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:5570
解决:1290
- 题目描述:
-
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
- 输入:
-
输入是一个个的三元组,分别是,外筐尺寸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@ @@@
-
刚开始没明白什么是叠筐,(虽然现在也还是不很明白,没事闲的叠这玩意,,,不过后来模拟就貌似明白点规律,
-
叠筐---题目分析: 注意题目中的各种陷阱, 1、注意格式四个小角为空 2、必须从中间开始模拟 3、格式问题,n=1的时候,和最后一个输出后没有空格。
-
代码贴上:
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; char s[105][105]; int main(){ int i,j,n,ok,flag=0; char a,b; while(cin>>n>>a>>b){ if(flag)cout<<endl;//注意格式,隔行输出空格的方法 if(n==1){ cout<<a<<endl; flag=1; continue; } i=n/2; ok=0; //先排版,再输出 while(i!=-1){ if(ok==0){//中心花色 //上下左右四个方位分别输出字母 for(j=i;j<n-i;j++) s[i][j]=a;//第一行 for(j=i;j<n-i;j++) s[n-i-1][j]=a;//最后一行 for(j=i;j<n-i;j++) s[j][i]=a;//第一列 for(j=i;j<n-i;j++) s[j][n-i-1]=a;//最后一列 ok=1; }else{ for(j=i;j<n-i;j++) s[i][j]=b;//第一行 for(j=i;j<n-i;j++) s[n-i-1][j]=b;//最后一行 for(j=i;j<n-i;j++) s[j][i]=b;//第一列 for(j=i;j<n-i;j++) s[j][n-i-1]=b;//最后一列 ok=0; } --i; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ //输出四个角的空格 if((i==0&&j==0)||(i==n-1&&j==0)||(j==n-1&&i==0)||(j==n-1&&i==n-1)) cout<<" "; else cout<<s[i][j]; } cout<<endl;//每行结束的换行 } flag=1;//下一行准备输出换行 } return 0; }