Fractal

来源:互联网 发布:gis中地理数据的特征 编辑:程序博客网 时间:2024/05/17 05:00

Fractal

Time Limit: 2 Seconds      Memory Limit: 65536 KB      Score: 1

问题描述

你们懂分形么?分形很美。

给大家介绍一种分形图,Sierpinski 三角形,它的分形过程可以用这张图直观的展现:

画一个等边三角形,找到三个边的中点,相互连起来,就得到了四个三角形,重复对外部的三个进行这个动作,就得到了 13 个三角形,一直进行下去,就是 Sierpinski 三角形了。

然后你要解决的问题来了:

我们对三角形这样标号,以 T 开头,上面的是 1,左下角是 2,右下角是 3,中间是 4,然后再次被划分出来的三角形的标号方式也是一样。

可以看到每个标号的三角形都有其相邻的三角形,给定一个三角形的编号,你需要找到和这个三角形相邻的三角形的编号。相邻指的是有一条边有重叠。

输入格式

仅有一行,以 T 开头的字符串,后面有若干位 [1, 3] 的正整数,表示三角形的编号。

输出格式

输出所有相邻的三角形的编号,每个占一行,按字典序大小输出。

样例输入

T312

样例输出

T314T34T4

数据范围

输入字符串长度 ≤ 60


分形图问题,最好是递归,While循环也行。#include<stdio.h>#include<string.h>char K[100];char X[100],Y[100],Z[100];int x,y,z;char P[3][100];int main(){int a,b,c,d,len;scanf("%s",K);x=1;y=1;z=1;for(len=0;K[len]!='\0';len++);char A,B;A=K[len-1]-'0';strcpy(X,K);strcpy(Y,K);strcpy(Z,K);if(A==4){X[len-1]=1+'0';Y[len-1]=2+'0';Z[len-1]=3+'0';}else if(A==1){Z[len-1]=4+'0';b=len-2;while(b!=0){B=K[b]-'0';if(B==3){X[b]=4+'0';X[b+1]='\0';break;}b--;}if(b==0)x=0;b=len-2;while(b!=0){B=K[b]-'0';if(B==2){Y[b]=4+'0';Y[b+1]='\0';break;}}if(b==0)y=0;}else if(A==2){Y[len-1]=4+'0';b=len-2;while(b!=0){B=K[b]-'0';if(B==3){X[b]=4+'0';X[b+1]='\0';break;}b--;}if(b==0)x=0;b=len-2;while(b!=0){B=K[b]-'0';if(B==1){Z[b]=4+'0';Z[b+1]='\0';break;}}if(b==0)z=0;}else if(A==3){X[len-1]=4+'0';b=len-2;while(b!=0){B=K[b]-'0';if(B==1){Z[b]=4+'0';Z[b+1]='\0';break;}b--;}if(b==0)z=0;b=len-2;while(b!=0){B=K[b]-'0';if(B==2){Y[b]=4+'0';Y[b+1]='\0';break;}}if(b==0)y=0;}int cnt=-1;if(x!=0){cnt++;strcpy(P[cnt],X);}if(y!=0){cnt++;strcpy(P[cnt],Y);}if(z!=0){cnt++;strcpy(P[cnt],Z);}char T[100];for(a=0;a<=cnt;a++)for(b=a+1;b<=cnt;b++){if(strcmp(P[a],P[b])>0){strcpy(T,P[a]);strcpy(P[a],P[b]);strcpy(P[b],T);}}for(a=0;a<=cnt;a++)printf("%s\n",P[a]);return 0;}


原创粉丝点击