题目链接:
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; }
时间: 2024-10-18 08:37:48