码迷,mamicode.com
首页 > 其他好文 > 详细

TheSierpinskiFractal(POJ-1941)【递推】

时间:2019-10-06 11:20:57      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:event   img   str   display   思路   col   超时   can   i++   

题意:用‘\’,‘/‘,‘_‘按照给定规则画出三角形

题目链接:https://vjudge.net/problem/POJ-1941

思路:题中的三角形生成规则是符合递推关系的,可以先手动完成第一个三角形,再根据题中规律逐级递推,推出每个三角形的图案,需要的时候直接查询即可。

  ??比赛的时候错误计算了数组需要的空间数量。所需列数最大值为4*2^n。

  注:输出时不能用%C,会超时,除此之外,每一行行末多余的空格也时不能输出同时也没必要输出的,因此需要处理图案时在行末手动加上‘\0‘,再以%s输出。

代码如下:

技术图片
 1 #include<cstdio>
 2 
 3 using namespace std;
 4 struct ha{
 5     int a,h;
 6     char mp[1050][2060];
 7 }aha[11];
 8 int main(){
 9     aha[1].a=4;aha[1].h=2;
10     aha[1].mp[0][0]= ;
11     aha[1].mp[0][1]=/;
12     aha[1].mp[0][2]=\\;
13     aha[1].mp[0][3]=\0;
14     aha[1].mp[1][0]=/;//__\\";
15     aha[1].mp[1][1]=aha[1].mp[1][2]=_;
16     aha[1].mp[1][3]=\\;
17     aha[1].mp[1][4]=\0;
18     for(int ii=2;ii<=10;ii++){
19         aha[ii].a=aha[ii-1].a*2;
20         aha[ii].h=aha[ii-1].h*2;
21         for(int i=0;i<aha[ii-1].h;i++){
22             for(int j=0;j<aha[ii-1].a/2;j++)
23                 aha[ii].mp[i][j]= ;
24             for(int j=aha[ii-1].a/2;j<aha[ii-1].a/2+aha[ii-1].a;j++){
25                 char ch=aha[ii-1].mp[i][j-aha[ii-1].a/2];
26                 aha[ii].mp[i][j]=aha[ii-1].mp[i][j-aha[ii-1].a/2];
27                 if(ch==\0)
28                     aha[ii].mp[i][j]= ;
29             }   
30         }
31         for(int i=aha[ii-1].h;i<aha[ii-1].h*2;i++){
32             for(int j=0;j<aha[ii-1].a;j++){
33                 char ch=aha[ii-1].mp[i-aha[ii-1].h][j];
34                 aha[ii].mp[i][j]=aha[ii-1].mp[i-aha[ii-1].h][j];
35                 if(ch==\0)
36                     aha[ii].mp[i][j]= ;
37             }
38         }
39         for(int i=aha[ii-1].h;i<aha[ii-1].h*2;i++){
40             for(int j=aha[ii-1].a;j<aha[ii-1].a*2;j++){
41                 char ch=aha[ii-1].mp[i-aha[ii-1].h][j-aha[ii-1].a];
42                 aha[ii].mp[i][j]=aha[ii-1].mp[i-aha[ii-1].h][j-aha[ii-1].a];
43                 if(ch==\0)    
44                     aha[ii].mp[i][j]= ;
45             }
46         }
47         int x=aha[ii-1].a+1;
48         for(int i=0;i<aha[ii].h;i++){
49             aha[ii].mp[i][x++]=\0;
50         }
51     }
52     int n;
53     while(scanf("%d",&n)&&n!=0){
54         for(int i=0;i<aha[n].h;i++){
55                 printf("%s",aha[n].mp[i]);
56             printf("\n");
57         }
58         printf("\n");
59     }
60     return 0;
61 }
By xxmlala

 

TheSierpinskiFractal(POJ-1941)【递推】

标签:event   img   str   display   思路   col   超时   can   i++   

原文地址:https://www.cnblogs.com/xxmlala-fff/p/11626538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!