蓝桥杯2018第九届C语言B组省赛习题题解——习题G.螺旋折线***(正方形解法)

每日刷题(五十)

蓝桥杯第九届C语言B组省赛习题

习题G:螺旋折线

在这里插入图片描述
在这里插入图片描述
图p1.png
在这里插入图片描述
这道题确实很有难度,根据题目题目所述,这个肯定不能用暴力枚举得满分的,我们要用到long long型数据长度,因为int型无法满足这么大的数据。

如果把这个螺旋想成一个个嵌套的正方形那么题目就简单多了
在这里插入图片描述
从里往外看,第一层正方形边长为2,第二层边长为4,第三层边长为6,但看这一个三角形,从里到外,每往外一层边长增加1,等差就是1,我们很容易想到等差数列
在这里插入图片描述
但是我们需要分四种情况讨论:
第一种:y > 0 && abs(x) <= y
即求点落在正方形上边的情况
第二种:x > 0 && x > abs(y)
即求点落在正方形右边的情况
第三种:y < 0 && abs(y) >= abs(x)
即求点落在正方形下边的情况
第四种:x < 0 && abs(x) > abs(y)
即求点落在正方形左边的情况

如下图
在这里插入图片描述
详细C代码如下:

#include<stdio.h>

long long sum1(long long x, long long y)		//上方线 
{
	if(y == 1)
		return 2 * y + y + x;
	else if(y == 2)
	{
		return 4 + (1 + (y - 1) * 1) * 2 + y + x;
	}
	else
		return (4 + (1 + (y - 2) * 1) * 2 * 4) * (y - 1) / 2 + (1 + (y - 1) * 1) * 2 + y + x;
}

long long sum2(long long x, long long y)		//右方线 
{
	if(x == 1)
		return 2 * x * 2 + x - y;
	else if(x == 2)
		return 4 + (1 + (x - 1) * 1) * 2 * 2 + x - y;
	else
		return (4 + (1 + (x - 2) * 1) * 2 * 4) * (x - 1) / 2 + (1 + (x - 1) * 1) * 2 * 2 + x - y;
}

long long anti(int y, int x)
{
	return abs(x) + y;	
}

long long sum3(long long x, long long y)
{
	if(abs(y) == 1)
		return 2 * y * 3 + abs(y) - x;
	else if(abs(y) == 2)
		return 4 + (1 + (abs(y) - 1) * 1) * 2 * 3 + abs(y) - x;
	else
		return (4 + (1 + (abs(y) - 2) * 1) * 2 * 4) * (abs(y) - 1) / 2 + (1 + (abs(y) - 1) * 1) * 2 * 3 + abs(y) - x;
}

long long sum4(long long x, long long y)
{
	if(abs(x) == 1)
		return 1;
	else if(abs(x) == 2)
		return 4 + anti(y, abs(x));
	else 
		return (4 + (1 + (abs(x) - 2) * 1) * 2 * 4) * (abs(x) - 1) / 2 + anti(y, abs(x));
}

int main()
{
	long long x, y;
	scanf("%lld %lld", &x, &y);
	long long sum = 0;
	if(y > 0 && abs(x) <= y)
	{
		sum = sum1(x, y); 
	}
	else if(x > 0 && x > abs(y))
	{
		sum = sum2(x, y);
	}
	else if(y < 0 && abs(y) >= abs(x))
	{
		sum = sum3(x, y);
	}
	else if(x < 0 && abs(x) > abs(y))
	{
		sum = sum4(x, y);
	}
	printf("%d\n", sum);
	return 0;
} 

部分运行结果如下:
在这里插入图片描述
在这里插入图片描述

如果喜欢我的文章,请记得三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持,下期更精彩!!!

发布了99 篇原创文章 · 获赞 16 · 访问量 5905

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/105186191