版本6和7间的区别
于2006-04-16 18:22:29修订的的版本6
大小: 2329
编辑: czk
备注:
于2006-04-21 20:58:03修订的的版本7
大小: 2403
编辑: czk
备注:
删除的内容标记成这样。 加入的内容标记成这样。
行号 1: 行号 1:
## page was renamed from 程序设计练习11——zju1954——Bee Maja

Bee Maja

http://acm.zju.edu.cn/show_problem.php?pid=1954

Time limit: 1 Seconds

Memory limit: 32768K

Maja is a bee. She lives in a bee hive with thousands of other bees. This bee hive consists of many hexagonal honey combs where the honey is stored in.

But bee Maja has a problem. Willi told her where she can meet him, but because Willi is a male drone and Maja is a female worker they have different coordinate systems.

Maja's Coordinate System

attachment:1954-1.gif

Maja who often flies directly to a special honey comb has laid an advanced two dimensional grid over the whole hive.

Willi's Coordinate System

attachment:1954-2.gif

Willi who is more lazy and often walks around just numbered the cells clockwise starting from 1 in the middle of the hive.

Help Maja to convert Willi's system to hers. Write a program which for a given honey comb number gives the coordinates in Maja's system.

1. Input

The input contains one or more integers which represent Willi's numbers. Each number stands on its own in a separate line, directly followed by a newline. The honey comb numbers are all less than 100 000.

2. Output

You should output the corresponding Maja coordinates to Willi's numbers, each coordinate pair on a separate line.

3. Sample Input

1
2
3
4
5

4. Sample Output

0 0
0 1
-1 1
-1 0
0 -1


   1 /*Written by czk*/
   2 #include <iostream>
   3 #include <algorithm>
   4 #include <string>
   5 #include <cmath>
   6 using namespace std;
   7 
   8 int main() {
   9         int n;
  10         while(cin >> n ) {
  11                 if(n==1) { cout << "0 0" << endl; continue; }
  12                 double r = sqrt((double)(4*n-5)/3);
  13                 int i = floor(r);
  14                 if(i%2==0) i--;
  15                 int level = (i-1)/2+1;
  16                 int offset = n - 3*(level-1)*level-2;
  17                 switch(offset / level) {
  18                         case 0: cout << level-1 - offset % level<< ' ' << 1 + offset % level << endl; break;
  19                         case 1: cout << -1 - offset % level <<' ' << level << endl; break;
  20                         case 2: cout << - level << ' ' << level - 1 - offset % level << endl; break;
  21                         case 3: cout << 1 - level + offset % level << ' ' << -1 - offset % level << endl; break;
  22                         case 4: cout << 1 + offset % level << ' ' << - level << endl; break;
  23                         case 5: cout << level << ' ' << 1 - level + offset % level << endl; break;
  24                 }
  25         }
  26         return 0;
  27 }

zju1954 (2008-06-01 13:25:35由czk编辑)

ch3n2k.com | Copyright (c) 2004-2020 czk.