Numb

来源:互联网 发布:linux tshark抓RTP包 编辑:程序博客网 时间:2024/05/22 00:14

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int MaxNumber = 29;

struct Position
{
 int X;
 int Y;
 int Z;
};
struct Position locate(int number)
{
 struct Position pos;
 if (number ==1)
 {
  pos.X = pos.Y = pos.Z = 0;
  return pos;
 }

 //计算这个数字在第几圈,0,1,2,3。跳出循环时,level为层数,tmp为这层最大的数
 int level = 0;
 int tmp = 1;
 while (tmp < number)
 {
  level++;
  tmp += 6*level;
 }

 //计算这个数字在哪个边,共有6条边,0~5
 int side = (tmp - number)/level;

 //计算该边的位置,每边共有level个位置,0~level-1
 int place = (tmp - number)%level;

 int posX;
 int posY;
 int posZ;
 switch (side)
 {
 case 0: posX = level; posY = place; posZ = level-place; break;
 case 1: posX = level-place; posY = level; posZ = -1*place; break;
 case 2: posX = -1*place; posY = level-place; posZ = -1*level; break;
 case 3: posX = -1*level; posY = -1*place; posZ = place-level; break;
 case 4: posX = place-level; posY = -1*level; posZ = place; break;
 case 5: posX = place; posY = place-level; posZ = level; break;
 default:break;
 }
 pos.X = posX;
 pos.Y = posY;
 pos.Z = posZ;
 return pos;
 
}

int getResult(int number1, int number2)
{
 struct Position pos1 = locate(number1);
 struct Position pos2 = locate(number2);
 
 vector<int> length;
 length.push_back(abs(pos1.X - pos2.X));
 length.push_back(abs(pos1.Y - pos2.Y));
 length.push_back(abs(pos1.Z - pos2.Z));
 
 sort(length.begin(), length.end());

 return length[0]+length[1];
}
int main()
{
 int a = getResult(1,7);

 int b = getResult(1,2);
 cout << a << endl <<b <<endl;
 return 0;
}

0 0
原创粉丝点击