-
Notifications
You must be signed in to change notification settings - Fork 0
/
Ratation.java
96 lines (87 loc) · 2.07 KB
/
Ratation.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package test;
import java.util.Scanner;
//题目描述
//21 22……
//20 7 8 9 10
//19 6 1 2 11
//18 5 4 3 12
//17 16 15 14 13
//看清楚以上数字排列的规律,设1点坐标为(0,0),x方向向右为正,y方向向下为正。例如7的坐标为(-1,-1),2的坐标为(1,0),3的坐标为(1,1)。
//编程实现输入任意坐标(x,y),输出对应的数字。
//
//解答要求
//时间限制:1000ms, 内存限制:64MB
//输入
//输入包含多组测试,每组测试占一行,包含两个整数x,y , (-100 ≤ x, y ≤ 100), 输入到文件末尾结束。
//
//输出
//输出对应的数字,每组测试占一行。
//
//样例
//输入样例 1 复制
//
//0 0
//-1 -1
//输出样例 1
//
//1
//7
//可以这么想,给定一个坐标,从(0,0)开始走,走多少步到这个坐标就是答案。
//等于说从(0,0)开始走,一个周期走四步,分别是向右走(2i-1),然后向下走(2i-1),向左(2i), 向上(2i) 。
//由于坐标绝对值不超过100,设置超过101的一个循环就是安全的,设置大也无所谓,反正找到这个坐标就跳出来。比较丑陋的是每一次变更x,y都要判断是否与输入的x0,y0相等是就返回。
public class Ratation {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int x=sc.nextInt();
int y=sc.nextInt();
int result=getResult(x,y);
System.out.println(result);
}
}
private static int getResult(int x, int y) {
// TODO Auto-generated method stub
int startx=0;
int starty=0;
int num=1;
if(startx==x&&starty==y){
return num;
}
for(int z=1;z<105;z++){
for(int i=1;i<=2*z-1;i++){
startx=startx+1;
num++;
// System.out.println(num);
if(startx==x&&starty==y){
return num;
}
}
for(int i=1;i<=2*z-1;i++){
starty=starty+1;
num++;
// System.out.println(num);
if(startx==x&&starty==y){
return num;
}
}
for(int i=1;i<=2*z;i++){
startx=startx-1;
num++;
// System.out.println(num);
if(startx==x&&starty==y){
return num;
}
}
for(int i=1;i<=2*z;i++){
starty=starty-1;
num++;
// System.out.println(num);
if(startx==x&&starty==y){
return num;
}
}
}
return num;
}
}