蓝桥杯螺旋折线题目解法
Posted 刘大帅-荆州刺史
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯螺旋折线题目解法相关的知识,希望对你有一定的参考价值。
背景:
我的苦逼的某211地质大学的同学由资源勘探专业被改革成为了“环境与大数据“专业。他从大一开始就要学习包括但不限于c语言、python等一系列计算机课程(悲),有一天,聊到了他的c程序设计作业,我一看,”嚯!好家伙!“这都是些什么啊。出于同情和好奇,我试着做了一下这些题目,我也不会。哈哈哈,但是又过了几天,我了解到,如下的题目是最简单的一道。并且经过我的搜索,发现他是蓝桥杯的一道题,但是,在看过了别人的解法后,我觉得十分不优雅,思路也复杂。于是我小小的写了另一种解法。
题目部分内容:
如图所示的螺旋折线经过平面上所有整点恰好一次。 对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。 例如dis(0, 1)=3, dis(-2, -1)=9 。给出整点坐标(X, Y),你能计算出dis(X, Y)吗?
解题思路:
我们可以看到,螺旋折线是螺旋前进的,我们把每一次90度转弯的点做为间隔,那么,每一组前进的步长就是1 1 2 2 3 3 4 4 5 5,以此类推,而每两组分别对应的是x方向和y方向的前进,并且,单独看x或者y时,你会发现,x先左后右,再左再右,y也是同理,先上后下,再上再下。如此,不难得出我们的思路了,也就是如下的代码。
#include<stdio.h>
#include<math.h>
int main()
int x = 0;
int y = 0;//x和y都是计算量
int s = 0;//s是要求的螺线距离
int X = 0;
int Y = 0;//大写的XY是参照量
int i = 1;
int j = 0;//这几个作为循环的变量,也做计算使用
printf("请依次输入所求点的横坐标X和纵坐标Y的值\\n");
scanf_s("%d", &X);
scanf_s("%d", &Y);
printf("该点为(%d,%d)\\n", X, Y);
for (i = 1; (x != X) || (y != Y);i++)
for (j = 1;j<=i;j++)
if ((x == X) && (y == Y))
break;
x = x +pow(-1,i);
s++;
if ((x == X) && (y == Y))
break;
for (j = 1;j <= i;j++)
if ((x == X) && (y == Y))
break;
y = y + pow(-1, i + 1);
s++;
if ((x == X) && (y == Y))
break;
printf("s=%d", s);
return 0;
(图片来源网络,侵删)
以上是关于蓝桥杯螺旋折线题目解法的主要内容,如果未能解决你的问题,请参考以下文章