题目:
10 11 | 14 15
8 9 | 12 13
--------------
2 3 | 6 7
0 1 | 4 5
————————
不断的迭代排列,来实现一个函数比如 输入坐标(0,3)输出8,
(5,1)--> 19
(5,3)----> 27等
#include "stdafx.h"
#include
#include
using namespace std;
//1 必须考虑起始点为0 的特殊情况
//2 加了一个base级之后,并非直降1级,有可能是很多级
int Mycompute(int x, int y)
{
int width1=1, width2=1; //框的宽度
int seq1=1, seq2=1; //块的级数
while (1)
{
if (x>width1)
{
width1=2*width1+1;
++seq1;
}
else break;
}
while (1)
{
if (y>width2)
{
width2=2*width2+1;
++seq2;
}
else break;
}
int baseVal=0; //分别代表最后结果的基础数值 和 窗口的剩余值
while(seq1>1)
{
width1=(width1-1)/2;
if (x>width1) //超过了一半的边界
{
baseVal+=pow((double)4,(double)(seq1-1));
x=x-width1-1; //记得减1哈
}
--seq1;
}
while(seq2>1)
{
width2=(width2-1)/2;
if (y>width2) //超过了一半的边界
{
baseVal+=2*pow((double)4,(double)(seq2-1));
y=y-width2-1;
}
--seq2;
}
return (baseVal+x+2*y);
}
void main()
{
cout< cout< cout< cout< cout< cout< cout<}
阅读(794) | 评论(0) | 转发(0) |