2020杭电多校第八场 1008 Hexagon

题目链接
看到题目正解上面那一堆复杂的东西是不是有些迷茫,那就和我一起来找规律吧!

首先我们看半径是偶数的情况

2020杭电多校第八场 1008 Hexagon_第1张图片

然后是偶数的情况

2020杭电多校第八场 1008 Hexagon_第2张图片
画的好累
是不是很容易就看出其中的蹊跷,规律还是很明显的。
因为不同人的画法不同,所以有不同情况,大体上都差不多。

代码

#include
using namespace std;

int t,n;

void solveji()
{
	for(int k=n-2;k>=1;k-=2)
	{
		int a = 4, b = 2;
		printf("3");
		for(int t=1;t<=5;t++)
		{
			for(int i=1;i<=k;i++)
				printf("%d%d",a,b);
			printf("%d",a);
			a++,b++;
			if(a > 6) a = 1;
			if(b > 6) b = 1;			
		}
		printf("%d",a);
		for(int i=1;i<=k-1;i++)
			printf("%d%d",b,a);
		printf("4");
	}
	printf("\n");
}

void solveou()
{
	for(int k=n-1;k>=1;k-=2)
	{
		int a = 4, b = 2;
		printf("3");
		for(int t=1;t<=5;t++)
		{
			if(t == 5 && k == 1) break;
			printf("%d",a);
			for(int i=1;i<=k-1;i++)
				printf("%d%d",b,a);
			a++,b++;
			if(a > 6) a = 1;
			if(b > 6) b = 1;
		}
		if(k != 1)
		{
			printf("%d",a);
			for(int i=1;i<=k-2;i++)
				printf("%d%d",b,a);
		}
		if(k == 1)printf("3");
		else printf("4");
	}
	printf("\n");
}

int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		if(n % 2) solveji();
		else solveou();
	}
	return 0;
}

你可能感兴趣的:(题解)