aabb问题

Posted Aftersoon_sun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了aabb问题相关的知识,希望对你有一定的参考价值。

输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位也相等),此题也就是7744问题

此题不可用 if(sqrt(n)==floor(sqrt(n))),判断sqrt(n)是否为整数,因为存在一个精度问题。

floor函数用法:floor(x),有时候也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接取按照数轴上最接近要求的值左边的值,也就是不大于要求的值的最大的那个)。

实例:floor(3.14) = 3.0
   floor(9.999999) = 9.0

原型:#include <math.h>
   double floor( double arg );

详细用法链接:http://baike.baidu.com/link?url=kBABJWlmZ2nMTs9c_P1MKi6WCotbeFBY2aS9BP2mLrc6C9IsCV636tiBfFP1-YulZSuntRzpV5ePyn_mNCLP55-JIELJQL88AlJ0j1uDOxC

方法(1)

#include <iostream>
using namespace std;
int main()
{
    for(int i=1;i<10;i++)
        for(int j=0;j<10;j++)
        {
            int n=i*1100+j*11;
            int m=floor(sqrt(n)+0.5);
            if(m*m==n)
                cout<<n<<endl;
        }
        return 0;
}

 

方法(2)枚举法

#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int main()
{
    for(int x=30;;x++)
    {
        int n=x*x;
        if(n<1000)
            continue;
        if(n>9999)
            break;
        //取高位aa
        int hi=n/100;
        //取低位bb
        int lo=n%100;
        if(hi/10==hi%10&&lo/10==lo%10)
            cout<<n<<endl;
    }
    return 0;
}

 

以上是关于aabb问题的主要内容,如果未能解决你的问题,请参考以下文章

aabb问题

aabb问题

在 OpenGL 中的 3D 模型上创建 AABB

Ray-AABB交叉检测算法

在对象旋转/平移后重新计算正确的 AABB

OpenGL 2D 圆 - 旋转 AABB 碰撞