打印图形这种题主要就是想办法找到一个方法递归打印,下面我们来一起看一看主要的是哪些题目。
1 打印三角形打印如下图案,
1 * 2 * * * 3 * * * * * * * * * 4 * * * * * * * * * * * * * * * * * * * * * * * * * * * 5 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 6 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
这道题比较简单的方法就是递归打印。
首先可以找一个字符数组记录每个位置的信息,不过最好开个三维的,这样把n为1到10的情况全部记录,比较方便。
然后仔细观察后,不难发现:所有图案均有三个较小图案组成,这样直接将它按顺序放在数组里即可(所以知道开三维数组的好处了吗?)
但是我们还发现打印的里面有空格和空行,那怎么办呢?
虽说你把空格存入数组再打印也不能说是不行,但是:
1. 数组空间大4倍。(因为空格也要存进去)
2. 递归处理起来要麻烦不少。
所以最好先递归,到打印时再处理空格与空行。
所以来看看代码吧:
//NW1405C 22-04-23 #includeusing namespace std; char a[11][1050][1050]; int ro,co; void make(int n)//r,c为开始打印的位置 { int p=pow(2,n-1),q=pow(2,n-2); for (int i=1;i<=p;i++) for (int j=1;j<=q;j++) a[n][i][j]=a[n-1][i][j]; for (int i=1;i<=p;i++) for (int j=1;j<=q;j++) a[n][i+p][j]=a[n-1][i][j]; for (int i=1;i<=p;i++) for (int j=1;j<=q;j++) a[n][i][j+q]=a[n-1][i][j]; return; } int main() { ios::sync_with_stdio(0); cin.tie(0); int n; for (int i=1;i<=10;i++) for (int j=1;j<=1024;j++) for (int k=1;k<=1024;k++) a[i][j][k]=' '; a[1][1][1]='*'; for (int i=2;i<=10;i++) { make(i); } while (cin>>n) { for (int i=1;i<=pow(2,n);i+=2) { for (int j=1;j<=pow(2,n);j++) cout<
(写的不好或者太麻烦,欢迎评论)
运行截图:
2 打印三角形2 (打印边)1
/
/__
2
/
/__
/ /
/__/__
3
/
/__
/ /
/__/__
/ /
/__ /__
/ / / /
/__/__/__/__
4
/
/__
/ /
/__/__
/ /
/__ /__
/ / / /
/__/__/__/__
/ /
/__ /__
/ / / /
/__/__ /__/__
/ / / /
/__ /__ /__ /__
/ / / / / / / /
/__/__/__/__/__/__/__/__
5
/
/__
/ /
/__/__
/ /
/__ /__
/ / / /
/__/__/__/__
/ /
/__ /__
/ / / /
/__/__ /__/__
/ / / /
/__ /__ /__ /__
/ / / / / / / /
/__/__/__/__/__/__/__/__
/ /
/__ /__
/ / / /
/__/__ /__/__
/ / / /
/__ /__ /__ /__
/ / / / / / / /
/__/__/__/__ /__/__/__/__
/ / / /
/__ /__ /__ /__
/ / / / / / / /
/__/__ /__/__ /__/__ /__/__
/ / / / / / / /
/__ /__ /__ /__ /__ /__ /__ /__
/ / / / / / / / / / / / / / / /
/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__
6
/
/__
/ /
/__/__
/ /
/__ /__
/ / / /
/__/__/__/__
/ /
/__ /__
/ / / /
/__/__ /__/__
/ / / /
/__ /__ /__ /__
/ / / / / / / /
/__/__/__/__/__/__/__/__
/ /
/__ /__
/ / / /
/__/__ /__/__
/ / / /
/__ /__ /__ /__
/ / / / / / / /
/__/__/__/__ /__/__/__/__
/ / / /
/__ /__ /__ /__
/ / / / / / / /
/__/__ /__/__ /__/__ /__/__
/ / / / / / / /
/__ /__ /__ /__ /__ /__ /__ /__
/ / / / / / / / / / / / / / / /
/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__
/ /
/__ /__
/ / / /
/__/__ /__/__
/ / / /
/__ /__ /__ /__
/ / / / / / / /
/__/__/__/__ /__/__/__/__
/ / / /
/__ /__ /__ /__
/ / / / / / / /
/__/__ /__/__ /__/__ /__/__
/ / / / / / / /
/__ /__ /__ /__ /__ /__ /__ /__
/ / / / / / / / / / / / / / / /
/__/__/__/__/__/__/__/__ /__/__/__/__/__/__/__/__
/ / / /
/__ /__ /__ /__
/ / / / / / / /
/__/__ /__/__ /__/__ /__/__
/ / / / / / / /
/__ /__ /__ /__ /__ /__ /__ /__
/ / / / / / / / / / / / / / / /
/__/__/__/__ /__/__/__/__ /__/__/__/__ /__/__/__/__
/ / / / / / / /
/__ /__ /__ /__ /__ /__ /__ /__
/ / / / / / / / / / / / / / / /
/__/__ /__/__ /__/__ /__/__ /__/__ /__/__ /__/__ /__/__
/ / / / / / / / / / / / / / / /
/__ /__ /__ /__ /__ /__ /__ /__ /__ /__ /__ /__ /__ /__ /__ /__
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__
这道题与上面的差不多,只不过要打印边,但总体还是递归。
不过这道题要注意几个地方:
1. 此题要设置初始值,也就是:
/
/__
2. 这道题赋初值时,不能写成 ='' ,这样会被误识别,一定要写成:=92;
( 的ASCII为92)
代码时间:
#include3 打印 Ousing namespace std; char a[11][3001][3001]; int ro,co; void make(int n)//r,c为开始打印的位置 { int p=pow(2,n-1),q=pow(2,n-2),r=pow(2,n); for (int i=1;i<=p;i++) for (int j=1;j<=r;j++) a[n][i][j+p]=a[n-1][i][j]; for (int i=1;i<=p;i++) for (int j=1;j<=r;j++) a[n][i+p][j]=a[n-1][i][j]; for (int i=1;i<=p;i++) for (int j=1;j<=r;j++) a[n][i+p][j+r]=a[n-1][i][j]; return; } int main() { ios::sync_with_stdio(0); cin.tie(0); int n; for (int i=1;i<=10;i++) for (int j=1;j<=2500;j++) for (int k=1;k<=2500;k++) a[i][j][k]=' '; a[1][1][2]='/';a[1][1][3]=92; a[1][2][1]='/';a[1][2][2]='_';a[1][2][3]='_';a[1][2][4]=92; for (int i=2;i<=10;i++) { make(i); } while (cin>>n) { for (int i=1;i<=pow(2,n);i++) { for (int j=1;j<=pow(2,n+1);j++) cout<
1
O
OOO
O
2
O
OOO
O
O O O
OOOOOOOOO
O O O
O
OOO
O
3
O
OOO
O
O O O
OOOOOOOOO
O O O
O
OOO
O
O O O
OOO OOO OOO
O O O
O O O O O O O O O
OOOOOOOOOOOOOOOOOOOOOOOOOOO
O O O O O O O O O
O O O
OOO OOO OOO
O O O
O
OOO
O
O O O
OOOOOOOOO
O O O
O
OOO
O
4
O
OOO
O
O O O
OOOOOOOOO
O O O
O
OOO
O
O O O
OOO OOO OOO
O O O
O O O O O O O O O
OOOOOOOOOOOOOOOOOOOOOOOOOOO
O O O O O O O O O
O O O
OOO OOO OOO
O O O
O
OOO
O
O O O
OOOOOOOOO
O O O
O
OOO
O
O O O
OOO OOO OOO
O O O
O O O O O O O O O
OOOOOOOOO OOOOOOOOO OOOOOOOOO
O O O O O O O O O
O O O
OOO OOO OOO
O O O
O O O O O O O O O
OOO OOO OOO OOO OOO OOO OOO OOO OOO
O O O O O O O O O
O O O O O O O O O O O O O O O O O O O O O O O O O O O
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O O O O O O O O O O O O O O O O O O O O O O O O O O O
O O O O O O O O O
OOO OOO OOO OOO OOO OOO OOO OOO OOO
O O O O O O O O O
O O O
OOO OOO OOO
O O O
O O O O O O O O O
OOOOOOOOO OOOOOOOOO OOOOOOOOO
O O O O O O O O O
O O O
OOO OOO OOO
O O O
O
OOO
O
O O O
OOOOOOOOO
O O O
O
OOO
O
O O O
OOO OOO OOO
O O O
O O O O O O O O O
OOOOOOOOOOOOOOOOOOOOOOOOOOO
O O O O O O O O O
O O O
OOO OOO OOO
O O O
O
OOO
O
O O O
OOOOOOOOO
O O O
O
OOO
O
(这个题就不放5了,太长了)
这个题也是第1题的变种,只不过从递归3个小部分,变成5个部分了。
注意上面的圈是大写O。
直接代码:
#includeusing namespace std; char a[8][2200][2200]; void make(int n) { int r,c;//strating point c=pow(3,n-1);r=0; for (int i=1;i<=pow(3,n-1);i++) for (int j=1;j<=pow(3,n-1);j++) a[n][r+i][c+j]=a[n-1][i][j]; c=0;r=pow(3,n-1); for (int i=1;i<=pow(3,n-1);i++) for (int j=1;j<=pow(3,n-1);j++) a[n][r+i][c+j]=a[n-1][i][j]; c=pow(3,n-1);r=pow(3,n-1); for (int i=1;i<=pow(3,n-1);i++) for (int j=1;j<=pow(3,n-1);j++) a[n][r+i][c+j]=a[n-1][i][j]; c=pow(3,n-1)*2;r=pow(3,n-1); for (int i=1;i<=pow(3,n-1);i++) for (int j=1;j<=pow(3,n-1);j++) a[n][r+i][c+j]=a[n-1][i][j]; c=pow(3,n-1);r=pow(3,n-1)*2; for (int i=1;i<=pow(3,n-1);i++) for (int j=1;j<=pow(3,n-1);j++) a[n][r+i][c+j]=a[n-1][i][j]; } int main() { int n; while (cin>>n) { for (int i=1;i<=7;i++) for (int j=1;j<=2200;j++) for (int k=1;k<=2200;k++) a[i][j][k]=' '; a[1][1][2]='O'; a[1][2][1]='O';a[1][2][2]='O';a[1][2][3]='O'; a[1][3][2]='O'; for (int i=2;i<=7;i++) make(i); for (int i=1;i<=pow(3,n);i++) { for (int j=1;j<=pow(3,n);j++) cout<



