标签: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 }
TheSierpinskiFractal(POJ-1941)【递推】
标签:event img str display 思路 col 超时 can i++
原文地址:https://www.cnblogs.com/xxmlala-fff/p/11626538.html