首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

两个试题解决思路

2012-02-07 
两个试题1.将A B两个整数交换 不要涉及第三个变量 并考虑溢出问题2.有螺旋数阵(如图 1为【0,0】,2为【0,1】,7

两个试题
1.将A B两个整数交换 不要涉及第三个变量 并考虑溢出问题
 2.有螺旋数阵(如图 1为【0,0】,2为【0,1】,7为【-1,-1】)要求输入坐标能求得坐标对应数值,或输入数值能得出其坐标

图:
  10 12 ...
  9 2 3
  8 1 4
  7 6 5


[解决办法]
两个变量A,B
A+B=A
B=A-B
A=A-B
怎么考虑溢出问题,没有想好
[解决办法]
第二题:
两个函数如下:

C/C++ code
#include "stdio.h"#include "math.h"#define max(a,b)    (((a) > (b)) ? (a) : (b))typedef struct tagPoint{    int x;    int y;}Point;Point int2pt(int x){    Point pt;    int r=(int)sqrt(x);    if(r%2==0)    {        if(x-r*r==0)        {            pt.x=r/2;            pt.y=1-r/2;        }        else if(x-r*r<r+1)        {            pt.x=r/2-(x-r*r-1);            pt.y=-r/2;        }        else        {            pt.x=-r/2;            pt.y=r/2-(r+1)*(r+1)+x;        }    }    else    {        if(x-r*r==0)        {            pt.x=-r/2;            pt.y=r/2;        }        else if(x-r*r<r+1)        {            pt.x=(x-r*r-1)-r/2;            pt.y=r/2+1;        }        else        {            pt.x=r/2+1;            pt.y=(r+1)*(r+1)-x-r/2;        }    }    return pt;}int pt2int(Point pt){    int n=max(abs(pt.x),abs(pt.y));    if(pt.x==n)        return (2*n-1)*(2*n-1)+2*n+n-pt.y;    else if(pt.y==n && pt.x>-n)        return (2*n-1)*(2*n-1)+pt.x+n;    else if(pt.x==-n)        return 4*n*n+2*n+n+pt.y+1;    else if(pt.y==-n)        return 4*n*n+n-pt.x+1;    return -1;}void main(){    int i;    for(i=1;i<40;i++)    {        Point pt = int2pt(i);        printf("%d\t%d,%d\t%d\n",i,pt.x,pt.y,pt2int(pt));    }} 

热点排行