C++输出谢尔宾斯基三角形

来源:互联网 发布:马云淘宝股份 编辑:程序博客网 时间:2024/06/11 19:19


题目描述

谢尔宾斯基三角形是一种分形,它的构造过程是这样的:
1.取一个实心的三角形。(多数使用等边三角形)
2.沿三边中点的连线,将它分成四个小三角形。
3.去掉中间的那一个小三角形。
4.对其余三个小三角形重复1。
我们想尝试用斜线、反斜线和下划线画出谢尔宾斯基三角,假设最小的三角是长这样的:
  /\
/__\
具体规律详见样例。

输入

多组数据输入输出。每行有一个整数n(1<=n<=10),表示执行了一次操作1,n=0时结束输入。

输出

画出执行n次操作1后的图形,调整你的输出到最左端(底边的第一个斜杠在第一列)。输出不能包含任何尾随空格。在每个测试用例后打印空行。

样例输入

3210

样例输出

       /\      /__\     /\  /\    /__\/__\   /\      /\  /__\    /__\ /\  /\  /\  /\/__\/__\/__\/__\   /\  /__\ /\  /\/__\/__\ /\/__\



解题思路:递归求解



#include <stdio.h>#include <stdlib.h> char arr[3000][3000];int n; void func(int top,int left,int ceng){      if(ceng==2)        return;     for(int i=1;i<=(ceng/2-1)*2;i++)        arr[top+ceng/2-1][left+i]='_';     for(int i=1;i<=ceng/2;i++)        arr[top+ceng-i][left+ceng]='/';     for(int i=1;i<=ceng/2;i++)        arr[top+ceng-i][left+ceng-i*2+1]='\\';     func(top,left,ceng/2);     func(top+ceng/2,left,ceng/2);     func(top+ceng/2,left+ceng,ceng/2); }  int main() {      while(1){        scanf("%d",&n);         if(n==0)            break;          int ceng;        if(n==1)            ceng=2;        if(n==2)            ceng=4;        if(n==3)            ceng=8;        if(n==4)            ceng=16;        if(n==5)            ceng=32;        if(n==6)            ceng=64;        if(n==7)            ceng=128;        if(n==8)            ceng=256;        if(n==9)            ceng=512;        if(n==10)            ceng=1024;           for(int i=1;i<=ceng;i++){            arr[i][1]='/';            arr[i][i*2]='\\';             arr[ceng][i+1]='_';            arr[ceng][ceng+(i)-1]='_';        }           func(1,1,ceng);          for(int i=1;i<=ceng;i++){             for(int j=1;j<=ceng-i;j++)                putchar(' ');             for(int j=1;j<=i*2;j++){                 if(arr[i][j]!='\\'&&arr[i][j]!='_'&&arr[i][j]!='/')                putchar(' ');                else                putchar(arr[i][j]);             }            putchar('\n');        }        putchar('\n');       }        return 0;}


原创粉丝点击