题目描述:输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数字也相等)。

分支和循环结合在一起时功能强大:

下面列举所有可能的结果aabb,然后判断它们是否为完全平方数。注意a的范围是1~9,但b可以是0.

  for(int a=;a<=;a++)
for(int b=;b<=;b++)
If(aabb是完全平方数)
printf(“%d\n”,aabb);

上面的程序并不完整——“aabb是完全平方数”是中文描述,而不是合法的C语言表达式,而aabb在C语言中也是另外一个变量,而不是把两个数字a和b拼在一起。这个把这样“不是真正程序”的“代码”成为伪代码(pseudocode)。虽然有一些正规的伪代码的定义,但在实际应用中,并不需要太拘泥于为代码的格式。主要的目标是描述算法梗概,避开细节,启发思路。

写出伪代码之后,我们需要考虑如何把它变成真正的代码。上面的伪代码有两个“非法”的地方;完全平方数判定,以及aabb这个变量。后者相对比较容易;用另外一个变量n=a×1100+b×11存储即可。

接下来的问题就要困难一些了:如何判断n是否为完全平方数?

方法一:PS(floor(x),也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数)

可不可以这样写?If(sqrt(n)==floor(sqrt(n))) printf(“%d\n”,n);即直接判断sqrt(n)是否为整数。理论上当然没问题,但这样写不保险,因为浮点数的运算(和函数)有可能存在误差。假设在经过大量计算后,由于误差的影响,整数1变成了0.99999999,floor的结果会是0而不是1,。为了减少误差的影响,一般改成四舍五入,即floor(x+0.5)。如果难以理解,可以想象在数轴上把一个单位区间左移0.5个单元的距离。

Floor(x)等于1的区间为【1,2】,而floor(x+0.5)等于1的区间为【0.5,1.5】.

  浮点运算可能存在误差。再进行浮点运算比较时,应考虑到浮点误差。

  总结:小数部分为0.5的数也会受到浮点误差的影响,因此任何一道严密的算法竞赛题目都需要想办法解决这个问题

另一思路是枚举平方根x,从而避免开方操作。

#include<stdio.h>
int main()
{
for(int x=;;x++) //for循环没有指定循环条件 如果期待你从32开始可以不用判断1000
{
int n=x*x;
    if(n<1000) continue;
if(n>) break;
int high=n/;
int low=n%;
if(high/==high%&&low/==low%)
printf("%d\n",n);
}
return ;
}

答案为

.

算法 之 aabb的更多相关文章

  1. [算法][包围盒]AABB简单类

    头文件: #pragma once #include <iostream> //一个假的点类型 struct Vector3 { float x; float y; float z; }; ...

  2. 游戏碰撞OBB算法(java代码)

    业务需求      游戏2D型号有圆形和矩形,推断说白了就是碰撞检测 :      1.圆形跟圆形是否有相交      2.圆形跟矩形是否相交       3.矩形和矩形是否相交           ...

  3. UE4物理模块(三)---碰撞查询(下)SAP/MBP/BVH算法简介

    在上一文中介绍了碰撞查询的配置方法: Jerry:UE4物理模块(三)---碰撞查询(上)​zhuanlan.zhihu.com 本篇介绍下UE4的各种零大小的射线检测,以及非零大小(带体积)的射线检 ...

  4. 基于 Mathematica 的机器人仿真环境(机械臂篇)[转]

    完美的教程,没有之一,收藏学习. 目的 本文手把手教你在 Mathematica 软件中搭建机器人的仿真环境,具体包括以下内容(所使用的版本是 Mathematica 11.1,更早的版本可能缺少某些 ...

  5. [算法][包围盒]球,AABB,OBB

    参考地址请看图片水印:http://www.cnblogs.com/iamzhanglei/archive/2012/06/07/2539751.html http://blog.sina.com.c ...

  6. JAVA智能设备基于OpenGL的3D开发技术 之AABB碰撞检测算法论述

    摘要:无论是PC机的3D还是智能设备应用上,碰撞检测始终是程序开发的难点,甚至可以用碰撞检测作为衡量3D引擎是否完善的标准.现有许多3D碰撞检测算法,其中AABB碰撞检测是一种卓有成效而又经典的检测算 ...

  7. 3D空间中射线与轴向包围盒AABB的交叉检测算法【转】

    引言 在上一节中,我讲述了如何实现射线与三角形的交叉检测算法.但是,我们应该知道,在游戏开发中,一个模型有很多的三角形构成,如果要对所有的物体,所有的三角形进行这种检测,就算现在的计算机运算能力,也是 ...

  8. 3D空间中射线与轴向包围盒AABB的交叉检测算法 【转】

    http://blog.csdn.net/i_dovelemon/article/details/38342739 引言 在上一节中,我讲述了如何实现射线与三角形的交叉检测算法. 但是,我们应该知道, ...

  9. 浅谈Manacher算法与扩展KMP之间的联系

    首先,在谈到Manacher算法之前,我们先来看一个小问题:给定一个字符串S,求该字符串的最长回文子串的长度.对于该问题的求解.网上解法颇多.时间复杂度也不尽同样,这里列述几种常见的解法. 解法一   ...

随机推荐

  1. 组装自己的tesla超级计算机

    原文链接:blog.csdn.net/xqj198404/article/details/20016279 NVIDIA链接:http://www.nvidia.cn/object/tesla_bui ...

  2. RGB_D_开发征程(使用Kinect)

    学习历程依此为纲! Kinect学习资料: kinect和openNI开发资料汇总:http://blog.csdn.net/chenli2010/article/details/6887646 原始 ...

  3. 实验1 OpenGL初识

    实验预备知识 Windows下的OpenGL编程步骤简单介绍详见课程实验教学博客-实验准备安装GLUT包与创建工程: http://www.cnblogs.com/opengl/archive/201 ...

  4. java必备技能

    Android应用程序开发是以Java语言为基础的,所以需要有扎实的Java基础知识.首先熟悉java基本语法,然后熟悉设计模式等. a) Java基础语法:看下面的<Java知识点列表> ...

  5. Python编码显示中文乱码

    爬虫时出现问题: import requests data=requests.get('http://roll.news.sina.com.cn/')print(data.text) 输出结果中文显示 ...

  6. Laravel的路由功能

    只能在当前方法内加载视图和URL跳转!

  7. 洛谷P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…

    题目描述 众所周知,在每一个彗星后都有一只UFO.这些UFO时常来收集地球上的忠诚支持者.不幸的是,他们的飞碟每次出行都只能带上一组支持者.因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走 ...

  8. jenkins 自动化部署

    Execute shell Command BUILD_ID=DONTKILLMEif [ ! -d "/usr/jenkins/$JOB_NAME" ]; then mkdir ...

  9. RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第五篇【AppiumLibrary校验函数介绍】

    http://blog.csdn.net/deadgrape/article/details/50619050 以上连作者先跪一下方便面,在上一篇中,作者遗漏了两个常用的函数: 1.长按 Long P ...

  10. <constant name="struts.devMode" value="true" />

    <constant name="struts.devMode" value="true" /> 当vlaue为true,表示struts处于开发模式 ...