打印十字图
Posted mabeytang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打印十字图相关的知识,希望对你有一定的参考价值。
问题描述
Algorithm
一开始没想到对称,比较可恶,对称之后就是找规律了,这里放上网上找的一张图,题目里面的“图”实在是“不堪入目”。
AC
1 #include<iostream> 2 3 using namespace std; 4 5 char m[5+4*30+1][5+4*30+1]; 6 7 void draw(int n) 8 { 9 for(int i=0;i<5+4*n;i++){ 10 for(int j=0;j<5+4*n;j++){ 11 m[i][j] = ‘.‘; // 初始化为 . 12 } 13 } 14 int i, j;i = j = 0; 15 for(i=2;i<(5+4*n+1)/2;i++){ 16 for(j=0;j<=i-3;j+=2){ 17 m[i][j] = ‘$‘; 18 } 19 if(!(i&1)) // 偶数行 20 m[i][j] = m[i][j+1] = m[i][j+2] = ‘$‘; 21 } 22 // 折叠 对称 23 for(int i=0;i<(5+4*n+1)/2;i++){ 24 for(int j=0;j<=i;j++){ 25 m[j][i] = m[i][j]; 26 } 27 } 28 for(int i=0;i<(5+4*n+1)/2;i++){ 29 for(int j=5+4*n-1,k=0;j>=(5+4*n+1)/2;j--,k++){ 30 m[i][j] = m[i][k]; 31 } 32 } 33 for(int i=(5+4*n-1),k=0;i>=(5+4*n+1)/2;i--,k++){ 34 for(int j=0;j<5+4*n;j++){ 35 m[i][j] = m[k][j]; 36 } 37 } 38 39 return; 40 } 41 42 int main() 43 { 44 int n = 0; 45 while(cin>>n) 46 { 47 draw(n); 48 for(int i=0;i<5+4*n;i++){ 49 for(int j=0;j<5+4*n;j++){ 50 cout<<m[i][j]; 51 } 52 cout<<endl; 53 } 54 } 55 56 return 0; 57 }
2019-02-02
17:47:32
以上是关于打印十字图的主要内容,如果未能解决你的问题,请参考以下文章