我写这篇文章的时间是2018年4月2号。昨天刚结束第九届蓝桥杯比赛,这道题是C++(B组)第二道编程题。
题目描述:给一个平面直角坐标系,从原点开始画螺旋折线,规定:折线从原点开始向左出发,然后向上走,接着向右走,然后向下走,再向左走,一直循环下去,并且每个点走过且仅走过一次。并规定给一条线段长度为1,现在要你编程实现,当你给定平面上任意一点坐标时,输出这个点的距离原点的路程。比如点(0,1)的距离为3,点(2,2)的距离为16。(由于本人只记得大概题目意思,所以题目描述可能不太准确,也没有画图展示,不过如果你们会搜到这篇文章,相信你们对于题目是非常熟悉的,时间与精力有限,在此不做过多赘述,望理解)
不知道有没有人认为这道题会用枚举或者递归来求解。当然,笔者并没有尝试这两种解法,如果你们有高效率而且容易理解的解法,欢迎你们给我留言分享。
解这道题其实并不需要任何数据结构的知识,完全是数学与逻辑的抽象,就能描述这个过程。解题的关键:确定折线保持当前方向与转向的边界条件。应该说比较简单。(如果还有不懂的地方请结合以下代码并结合那个螺旋图分析)
C++源代码如下:
#include "stdafx.h"
#include <iostream>
using namespace std;
int sum=1;
int fun(int x,int y,i