void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

题目给出如图所示的一个值,然后按照右图的值找出在左图的坐标

很容易,但是规律很难找,我是copy别人代码,看了恍然大悟,就是分情况用if来判断

1 #include<stdio.h>
2 #include<stdlib.h>
3  int a[100005][5];
4  int main()
5 {
6 int n;
7 a[1][1]=0;
8 a[1][2]=0;
9 a[2][1]=0;
10 a[2][2]=1;
11 //找到规律直接循环递归输出就ok
12   for(int i=3;i<=100000;i++)
13 {
14 if(a[i-1][1]<=0)
15 {
16 if((abs(a[i-1][1])<abs(a[i-1][2]))&&a[i-1][2]>0)
17 {
18 a[i][2]=a[i-1][2];
19 a[i][1]=a[i-1][1]-1;
20 }
21 if((abs(a[i-1][1])>=abs(a[i-1][2]))&&a[i-1][2]>0)
22 {
23 a[i][2]=a[i-1][2]-1;
24 a[i][1]=a[i-1][1];
25 }
26 if(a[i-1][2]<=0)
27 {
28 a[i][1]=a[i-1][1]+1;
29 a[i][2]=a[i-1][2]-1;
30 }
31 if(a[i-1][2]<0&&a[i-1][1]==0)
32 {
33 a[i][2]=a[i-1][2];
34 a[i][1]=a[i-1][1]+1;
35 }
36 }
37 if(a[i-1][1]>0)
38 {
39 if(a[i-1][2]<0&&abs(a[i-1][1])<abs(a[i-1][2]))
40 {
41 a[i][2]=a[i-1][2];
42 a[i][1]=a[i-1][1]+1;
43 }
44 if(abs(a[i-1][1])>=abs(a[i-1][2])&&a[i-1][2]<1)
45 {
46 a[i][1]=a[i-1][1];
47 a[i][2]=a[i-1][2]+1;
48 }
49 if(a[i-1][2]>=1)
50 {
51 a[i][1]=a[i-1][1]-1;
52 a[i][2]=a[i-1][2]+1;
53 }
54 }
55 }
56 while(scanf("%d",&n)!=EOF) {
57 printf("%d %d\n",a[n][1],a[n][2]);
58 }}
posted on 2011-04-14 23:07  void-man  阅读(133)  评论(0)    收藏  举报