求助:WA #6#7#8 #9
查看原帖
求助:WA #6#7#8 #9
1266200
gin23楼主2024/8/7 22:02
#include<stdio.h>
#include<malloc.h>
void CreatBinarTree(char** binarytree,int i,int j,int m,int cnt,int *layer);
void InitLayer(int * layer,int m,int lin);
void PrintTree(char** binarytree,int col,int lin);
void DeleteBinarTree(char** binarytree,int i,int j,int m,int cnt,int *layer);
void InitLen(int *len,int m);
int main()
{
	int m,n,h,num;//h为二叉树的高度,num为二叉树次下层节点数
	scanf("%d %d",&m,&n);
	if(m==1 && n==0)
	{
		printf("o");
		return 0;
	}else if(m==1 && n!=0)
	{
		int x,y;
		for(int i=0;i<n;i++)
		{
			scanf("%d %d",&x,&y);
		}
		printf(" ");
		return 0;
	}
	h=m-1;
	num=1<<(h-1);
	int col,lin;
	col=num*6-1;//最后一行含空格的长度
	lin=col/2+1;
	char* binarytree[lin];//[col]
	for(int i=0;i<lin;i++)
	{
		binarytree[i]=(char*)malloc(col*sizeof(char));
	}
	for(int i=0;i<lin;i++)
	{
		for(int j=0;j<col;j++)
		{
			binarytree[i][j]=' ';
		}
	}
	binarytree[0][col/2]='o';
	int layer[m];
	//int len[m];
	InitLayer(layer,m,lin);
	CreatBinarTree(binarytree,0,col/2,lin-1,1,layer+1);
	//InitLen(len,m);
	int pos[1023][2];
	int count=0;
	for(int i=0;i<lin;i++)
	{
		for(int j=0;j<col;j++)
		{
			if(binarytree[i][j]=='o')
			{
				pos[count][0]=i;
				pos[count][1]=j;
				count++;
			}
		}
	}
	for(int i=0;i<n;i++)
	{
		int x,y;
		scanf("%d %d",&x,&y);
		x=x-1;
		int staus;
		staus=y%2;
		y=(y+1)/2;
		int no=(1<<(x-1))+y-1;
		x=pos[no-1][0];
		y=pos[no-1][1];
		if(staus)
		{
			DeleteBinarTree(binarytree,x+1,y-1,lin-1,x+2,layer);
		}else
		{
			DeleteBinarTree(binarytree,x+1,y+1,lin-1,x+2,layer);
		}
	}
	PrintTree(binarytree,col,lin);
	return 0;
}
void CreatBinarTree(char** binarytree,int i,int j,int m,int cnt,int *layer)
{
	if(binarytree[i][j]=='o' && cnt<=m)
	{
		binarytree[i+1][j-1]='/';
		CreatBinarTree(binarytree,i+1,j-1,m,cnt+1,layer);
		binarytree[i+1][j+1]='\\';
		CreatBinarTree(binarytree,i+1,j+1,m,cnt+1,layer);
	}else if(binarytree[i][j]=='/' && layer[0]!=cnt)
	{
		binarytree[i+1][j-1]='/';
		CreatBinarTree(binarytree,i+1,j-1,m,cnt+1,layer);
	}else if(binarytree[i][j]=='/' && layer[0]==cnt)
	{
		binarytree[i+1][j-1]='o';
		CreatBinarTree(binarytree,i+1,j-1,m,cnt+1,layer+1);
	}else if(binarytree[i][j]=='\\' && layer[0]!=cnt)
	{
		binarytree[i+1][j+1]='\\';
		CreatBinarTree(binarytree,i+1,j+1,m,cnt+1,layer);
	}else if(binarytree[i][j]=='\\' && layer[0]==cnt)
	{
		binarytree[i+1][j+1]='o';
		CreatBinarTree(binarytree,i+1,j+1,m,cnt+1,layer+1);
	}
	return;
}
void InitLayer(int * layer,int m,int lin)//已调试
{
	layer[m-1]=lin-1;
	int n=m-1;
	int len=1;
	for(int i=1;i<m;i++)
	{
		layer[n-1]=layer[n]-len-1;
		len+=len+(i-1);
		n--;
	}
}
void PrintTree(char** binarytree,int col,int lin)
{
	for(int i=0;i<lin;i++)
	{
		for(int j=0;j<col;j++)
		{
			printf("%c",binarytree[i][j]);
		}
		if(i!=lin-1)
		{
			printf("\n");
		}
	}
}
void DeleteBinarTree(char** binarytree,int i,int j,int m,int cnt,int *layer)
{
	if(cnt>m)
	{
		binarytree[i][j]=' ';
		return;
	}
	if(binarytree[i][j]=='o' && cnt<=m)
	{
		DeleteBinarTree(binarytree,i+1,j-1,m,cnt+1,layer);
		DeleteBinarTree(binarytree,i+1,j+1,m,cnt+1,layer);
		binarytree[i][j]=' ';
	}else if(binarytree[i][j]=='/' && layer[0]!=cnt)
	{
		DeleteBinarTree(binarytree,i+1,j-1,m,cnt+1,layer);
		binarytree[i][j]=' ';
	}else if(binarytree[i][j]=='/' && layer[0]==cnt)
	{
		DeleteBinarTree(binarytree,i+1,j-1,m,cnt+1,layer+1);
		binarytree[i][j]=' ';
	}else if(binarytree[i][j]=='\\' && layer[0]!=cnt)
	{
		DeleteBinarTree(binarytree,i+1,j+1,m,cnt+1,layer);
		binarytree[i][j]=' ';
	}else if(binarytree[i][j]=='\\' && layer[0]==cnt)
	{
		DeleteBinarTree(binarytree,i+1,j+1,m,cnt+1,layer+1);
		binarytree[i][j]=' ';
	}
	return;
}
void InitLen(int *len,int m)
{
	len[0]=1;
	for(int i=1;i<m;i++)
	{
		len[i]=len[i-1]+i;
	}
}

题目样例和自己设计的几个数据都过了,不知道有哪些数据过不了?

2024/8/7 22:02
加载中...