Chinaunix首页 | 论坛 | 博客
  • 博客访问: 782821
  • 博文数量: 230
  • 博客积分: 6330
  • 博客等级: 准将
  • 技术积分: 2188
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-10 15:55
个人简介

脚踏实地

文章分类

全部博文(230)

文章存档

2017年(1)

2016年(7)

2015年(10)

2014年(32)

2013年(24)

2012年(33)

2011年(50)

2010年(30)

2009年(43)

分类:

2009-11-22 22:00:49

题目:
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) |
给主人留下些什么吧!~~