版本7和9间的区别 (跳过第2版)
于2006-04-21 20:58:03修订的的版本7
大小: 2403
编辑: czk
备注:
于2008-06-01 11:46:45修订的的版本9
大小: 1274
编辑: 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;
        }
    }
    return 0;

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

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

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