蓝桥杯螺旋折线题目解法

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;

(图片来源网络,侵删)

以上是关于蓝桥杯螺旋折线题目解法的主要内容,如果未能解决你的问题,请参考以下文章

LQ0130 螺旋折线数学规律

路径蓝桥杯python解法

C语言课程设计——25道蓝桥杯练习题

第七届蓝桥杯C语言B组题目总结

蓝桥杯 地宫取宝 记忆深度搜索+两种dp解法

螺旋折线