版本7和10间的区别 (跳过第3版)
于2006-04-21 20:58:03修订的的版本7
大小: 2403
编辑: czk
备注:
于2008-06-01 13:25:35修订的的版本10
大小: 1273
编辑: czk
备注:
删除的内容标记成这样。 加入的内容标记成这样。
行号 1: 行号 1:
## page was renamed from 程序设计练习11——zju1954——Bee Maja
行号 6: 行号 5:
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.

== 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.

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

== Sample Input ==
{{{
1
2
3
4
5
}}}
== Sample Output ==
{{{
0 0
0 1
-1 1
-1 0
0 -1
}}}


------
行号 62: 行号 14:
 int n;
 
while(cin >> n ) {
  if(n==1) { cout << "0 0" << endl; continue; }
  double r = sqrt((double)(4*n-5)/3);
  int i = floor(r);
  if(i%2==0) i--;
  
int level = (i-1)/2+1;
  int offset = n - 3*(level-1)*level-2;
  switch(offset / level) {
   case 0: cout << level-1 - offset % level<< ' ' << 1 + offset % level << endl; break;
   case 1: cout << -1 - offset % level <<' ' << level << endl; break;
   case 2: cout << - level << ' ' << level - 1 - offset % level << endl; break;
   case 3: cout << 1 - level + offset % level << ' ' << -1 - offset % level << endl; break;
   case 4: cout << 1 + offset % level << ' ' << - level << endl; break;
   case 5: cout << level << ' ' << 1 - level + offset % level << endl; break;
  }
 }
 return 0;
    int n;
    
while (cin >> n ) {
        if (n==1) {
           
cout << "0 0" << endl;
           
continue;
       
}
        double r = sqrt((double)(4*n-5)/3);
        int i = floor(r);
        if (i%2==0)
            i--;
        
int level = (i-1)/2+1;
        int offset = n - 3*(level-1)*level-2;
        switch (offset / level) {
        case 0:
           
cout << level-1 - offset % level<< ' ' << 1 + offset % level << endl;
           
break;
        case 1:
           
cout << -1 - offset % level <<' ' << level << endl;
           
break;
        case 2:
           
cout << - level << ' ' << level - 1 - offset % level << endl;
           
break;
        case 3:
           
cout << 1 - level + offset % level << ' ' << -1 - offset % level << endl;
           
break;
        case 4:
           
cout << 1 + offset % level << ' ' << - level << endl;
           
break;
        case 5:
           
cout << level << ' ' << 1 - level + offset % level << endl;
           
break;
        }
    }

Bee Maja

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

   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) {
  12             cout << "0 0" << endl;
  13             continue;
  14         }
  15         double r = sqrt((double)(4*n-5)/3);
  16         int i = floor(r);
  17         if (i%2==0) 
  18             i--;
  19         int level = (i-1)/2+1;
  20         int offset = n - 3*(level-1)*level-2;
  21         switch (offset / level) {
  22         case 0:
  23             cout << level-1 - offset % level<< ' ' << 1 + offset % level << endl;
  24             break;
  25         case 1:
  26             cout << -1 - offset % level <<' ' << level << endl;
  27             break;
  28         case 2:
  29             cout << - level << ' ' << level - 1 - offset % level << endl;
  30             break;
  31         case 3:
  32             cout << 1 - level + offset % level << ' ' << -1 - offset % level << endl;
  33             break;
  34         case 4:
  35             cout << 1 + offset % level << ' ' << - level << endl;
  36             break;
  37         case 5:
  38             cout << level << ' ' << 1 - level + offset % level << endl;
  39             break;
  40         }
  41     }
  42 }

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

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