題目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; }