递归绘制图形
2018-01-23 20:29
381 查看
输入数字, 绘制如下图形
依次类推
这类使用递归画图的问题, 关键要找到规律.
把一张图的各个元素解构, 得出递归关系.
如改图P(n)即为
找到每个图形的中心点, 然后分治地解决每个元素.
如此图可以左上图为中心, 计算其他图相对此图的位置, 然后依次递归
或以中间那个为中心点, 同理.
使用二维数组存储图形.
代码如下:
一道牛客网上练习赛的题目
道理相同, 找到各图形间距的规律
注意此题对输出格式有要求, 还应该注意内存不超过限度.
依次类推
这类使用递归画图的问题, 关键要找到规律.
把一张图的各个元素解构, 得出递归关系.
如改图P(n)即为
P(n-1) P(n-1) P(n-1) P(n-1) P(n-1)
找到每个图形的中心点, 然后分治地解决每个元素.
如此图可以左上图为中心, 计算其他图相对此图的位置, 然后依次递归
或以中间那个为中心点, 同理.
使用二维数组存储图形.
代码如下:
#include <iostream> #include <cstring> #define MAX 10000 using namespace std; char map[MAX][MAX]; int Pow( int n ) { int an = 1; for( int i = 1; i <= n; ++i ){ an *= 3; } return an; } void print(char map[MAX][MAX], int size) { for( int i = 0; i < size; ++i ) { for( int j = 0; j < size; ++j ) { cout << map[i][j] << ' '; } cout << endl; } } void draw(int n, int x, int y) { if( n == 1 ) { map[x][y] = 'X'; } else { int size = Pow(n-2); draw(n - 1, x, y); draw(n - 1, x + 2*size, y); draw(n - 1, x + size, y + size); draw(n - 1, x, y + 2*size); draw(n - 1, x + 2*size, y + 2*size); } } int main( ) { int n; cin >> n; memset(map, ' ', sizeof(map)); draw(n, 0, 0); int size = Pow(n-1); print(map, size); }
一道牛客网上练习赛的题目
道理相同, 找到各图形间距的规律
注意此题对输出格式有要求, 还应该注意内存不超过限度.
#include <iostream> #include <cstring> #define MAX 5000 using namespace std; char map[MAX][MAX] = {}; int Pow(int n) { int p = 1; for( int i = 1; i <= n; ++i ) { p *= 3; } return p; } void draw(int n, int x, int y) { if( n == 0 ) { map[x][y] = 'O'; } else { int size = Pow(n-1); draw(n-1, x, y - size); draw(n-1, x - size, y); draw(n-1, x + size, y); draw(n-1, x, y + size); } } void print(int size) { int end[MAX]; for( int i = 0; i < size; ++i ) { for( int j = 0;j < size; ++j ) { if(map[i][j] != ' ') end[i] = j; } } for( int i = 0; i < size; ++i ) { for( int j = 0; j <= end[i]; ++j ) { cout << map[i][j]; } cout << endl; } } void loop(int n) { memset(map, ' ', sizeof(map)); int size = Pow(n); draw(n, size/2, size/2); print(size); } int main() { int t, n; cin >> t; while( t-- ) { cin >> n; loop(n); } }
相关文章推荐
- POJ 2083 递归绘制图形
- poj 3768 递归(绘制图形)
- Canvas绘制基础图形
- [Web Chart系列之一(续)]Web端图形绘制SVG,VML, HTML5 Canvas 简单实例
- 如何在DeepEarth中进行图形绘制(点、线、多边形以及自定义图片图层)
- 绘制各种图形
- OSG绘制几何图形
- OpenGL ES绘制3D图形
- html5 canvas实例 绘制变形图形 径向渐变
- opencv绘制图形
- 绘制文本和图形
- 【万里征程——Windows App开发】绘制图形
- iOS开发UI篇—Quartz2D使用(绘制基本图形)
- C#利用GDI绘制常见图形和文字
- 圆圈(图形输出问题,递归)
- GPU 图形绘制管线
- ios drawRect绘制图形
- VS2010 使用TeeChart绘图控件 - 之二 - 绘制图形(折线图,柱状图)
- 推荐12个最好的 JavaScript 图形绘制库
- D3——绘制SVG图形-直方图