返回题解分享
讨论 / 题解分享/ 帖子详情

螺旋折线(编程题) - 题解

在B站上学到的一位大佬的思路,如下:

//核心在于改变图形模样,使其变成一个简易图形
//以第一圈为例 将第一个线段以点(-1,0)为中心顺时针方向旋转90°
//这会形成一个正方形 而后将每个多出来的线段移位
//使螺旋折现变成一个又一个的同心正方形
//再根据x,y的正负取值进行分类讨论
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
	int x,y,dis=0;
	cin >> x >> y;
	int jud = max(abs(x),abs(y));//点所在的层数 
	int inside=0,outside=0;
	if(x==0&&y==0){
		inside=outside=0;
	}
	for(int i=1;i<jud;i++)
		inside+=i*8;
	if(jud == abs(y)){
		if(y>0) outside=3*y+x;
		else outside=7*(-y)-x;
	}
	if(jud == abs(x)){
		if(x>0) outside=5*x-y;
		else outside=(-x)+y;
	}
	dis = inside + outside;
	cout << dis;
	return 0;
}
0 回复 0 转发 2 喜欢 17 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!