zoj 2423 Fractal
来源:互联网 发布:新华阅读网软件 编辑:程序博客网 时间:2024/06/08 00:19
A fractal is an object or quantity that displays self-similarity, in a somewhat technical sense, on all scales. The object need not exhibit exactly the same structure at all scales, but the same "type" of structures must appear on all scales.
A box fractal is defined as below :
- A box fractal of degree 1 is simply
X
- A box fractal of degree 2 is
X X XX X
- If using B(n - 1) to represent the box fractal of degree n - 1, then a box fractal of degree n is defined recursively as following
B(n - 1) B(n - 1) B(n - 1)B(n - 1) B(n - 1)
Your task is to draw a box fractal of degree n.
Input
The input consists of several test cases. Each line of the input contains a positive integer n which is no greater than 7. The last line of input is a negative integer -1 indicating the end of input.
Output
For each test case, output the box fractal using the 'X' notation. Please notice that 'X' is an uppercase letter. Print a line with only a single dash after each test case. Don't output any trailing spaces at the end of each line, or you may get an 'Presentation Error'!
Sample Input
1234-1
Sample Output
X-X X XX X-X X X X X XX X X X X X X X XX X X X X XX X X X-X X X X X X X X X X X XX X X X X X X X X X X X X X X X X XX X X X X X X X X X X XX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XX X X X X X X X X X X XX X X X X X X X X X X X X X X X X XX X X X X X X X X X X XX X X X X X X X-
分析:
此题用递归实现。
因为输出时都是从左到右,所以不能分块打印。
故考虑数组保存这个二维图形。找出规律,对于每个n,都可以递归处理5个大X,对于每个大X,又可以分成5个小X。
最后注意处理时X在数组中的位置。
代码:
以前做的,直接粘了。
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const int maxn = 1000;char b[ maxn ][ maxn ];int flag[ maxn ];void f( int n, int x, int y ){if ( n == 1 ){b[ x ][ y ] = 'X';return;}int t = ( int )pow( 3.0, n - 2 );f( n - 1, x, y );f( n - 1, x + t, y + t );f( n - 1, x + 2 * t, y );f( n - 1, x, y + 2 * t );f( n - 1, x + 2 * t, y + 2 * t );}int main(){int n;while ( cin >> n && n != -1 ){memset( b, '\0', sizeof( b ) );memset( flag, 0, sizeof( flag ) );int i, j;int temp = ( int )pow( 3.0, n - 1 );for ( i = 0; i < temp; i++ ){for ( j = 0; j < temp; j++ )b[ i ][ j ] = ' ';// b[ i ][ j ] = '\n';}f( n, 0, 0 );for ( i = 0; i < temp; i++ ) { for ( j = temp - 1; j >= 0; j-- ) if ( b[ i ][ j ] == 'X' ) { flag[ i ] = j; break; }}for ( i = 0; i < temp; i++ ){for ( j = 0; j <= flag[ i ]; j++ )printf("%c", b[ i ][ j ]);printf("\n");}printf("-\n");}return 0;}
- [ZOJ 2423] Fractal
- zoj 2423 Fractal
- ZOJ 3507 Fractal
- zoj 3507 Fractal
- Fractal
- Fractal
- Fractal
- Mandelbox Fractal
- poj2083 Fractal
- 【HIHOCODER】Fractal
- Fractal Interpolation
- JNOJ Fractal
- Fractal 分形学
- ZOJ 2423
- ZOJ-2423
- 分形(fractal)
- Fractal Software Composition Framework
- 分形蕨( fractal fern)
- CAsyncSocket与CSocket的区别-同步和异步socket
- [IOS 开发] CoreData多线程安全
- Eclipse 优化
- 寒假自主学习项目一 - 链表(1、顺序输出)
- wamp开启gzip网页压缩
- zoj 2423 Fractal
- td中的内容居中的办法
- bzoj 1059 题解
- <Android> Android Studio
- SVN版本控制器的普通服务器安装----->Subversion
- Java线程个数简单控制
- Splay括号匹配(BZOJ2209)
- ACM - 算法篇,基础题目
- SDJZU_新生_KMP/字符串