第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛D 分形

问题 D: 简单的图形输出
时间限制: 1 Sec 内存限制: 30 MB
提交: 526 解决: 103
[提交][状态][讨论版]
题目描述
谢尔宾斯基三角形是一种分形,它的构造过程是这样的:
1.取一个实心的三角形。(多数使用等边三角形)
2.沿三边中点的连线,将它分成四个小三角形。
3.去掉中间的那一个小三角形。
4.对其余三个小三角形重复1。
我们想尝试用斜线、反斜线和下划线画出谢尔宾斯基三角,假设最小的三角是长这样的:
/\
/__\
具体规律详见样例。
输入
多组数据输入输出。每行有一个整数n(1<=n<=10),表示执行了一次操作1,n=0时结束输入。

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

样例输入
3
2
1
0
样例输出
/\
/__\
/\ /\
/\/\
/\ /\
/\ /\
/\ /\ /\ /\
/\/\/\/\

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

/\
/__\
题解:原图形较复杂的分形,还是分形的基本做法。确定位置,确定改变量的大小。剩下都是套路。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<map>
#include<vector>
#include<string.h>
#define ll long long
using namespace std;
const int N   = 1e6+7;
const int MOD = 1e9+7;
char a[3333][3333];
int pow(int x,int y)
{
    int ans=1;
    while(y)
    {
        if(y&1) ans*=x;
        x*=x,y>>=1;
    }
    return ans;
}
int n;
void dfs(int cnt,int x,int y)
{
    if(cnt==1)
    {
        a[x][y]='/';
        a[x][y+1]='\\';
        a[x+1][y-1]='/';
        a[x+1][y]='_';
        a[x+1][y+1]='_';
        a[x+1][y+2]='\\';
        return ;
    }
    int sz=pow(2,cnt-1);
    dfs(cnt-1,x,y);
    dfs(cnt-1,x+sz,y-sz);
    dfs(cnt-1,x+sz,y+sz);
}
int main()
{
    bool flag=false;
    while(cin>>n)
    {
        if(flag)puts("");
        flag=true;
        if(n==0) break;
        memset(a,' ',sizeof(a));
        int l=pow(2,n);
        int r=pow(2,n+1);
        dfs(n,1,l);
        for(int i=1;i<=l;i++)
        {
            for(int j=r;j;j--)
            {
            if(a[i][j]!=' ')
            {
                a[i][j+1]='\0';
                break;
            }
            }

        }
        for(int i=1;i<=l;i++) puts(a[i]+1);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值