题目描述:输出所有形如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. Oracle 11g XE 与 Oracle SQL Developer 的配置与使用(重制版)

    Oracle 11g XE 与 Oracle SQL Developer 的配置与使用(重制版) 前提概要 项目上需求要适应Oracle数据库,当然这和某EF框架也有关. 因为Oracle 的表名和列 ...

  2. 杭电1159 Common Subsequence【最长公共子序列】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 解题思路:任意先给出两个字符串 abcfbc abfcab,用dp[i][j]来记录当前最长的子 ...

  3. js 或运算

    表达式a && 表达式b : 计算表达式a(也可以是函数)的运算结果, 如果为 True, 执行表达式b(或函数),并返回b的结果: 如果为 False,返回a的结果: 表达式a || ...

  4. Kaggle竞赛顶尖选手经验汇总

    What is your first plan of action when working on a new competition? 理解竞赛,数据,评价标准. 建立交叉验证集. 制定.更新计划. ...

  5. AM335X用RGB888连接LCD如何以16位色彩模式显示图片

    在AM335x中,在连接显示屏的时候,存在一个问题.这个在am335x Sillicon Errata已经提到过 在RGB888模式中   而对于RGB565模式的硬件连接 不难看出,这个RGB是反的 ...

  6. concurrent.futures 学习笔记

    concurrent.futures 先看下官方介绍 The asynchronous execution can be performed with threads, using ThreadPoo ...

  7. 如何指定GCC的默认头文件路径

    如何指定GCC的默认头文件路径 网上偶搜得之,以之为宝:)原地址:http://blog.chinaunix.net/u/28781/showart.php?id=401631============ ...

  8. Python-基础-day2

    Python环境的安装 安装Python: windows: 1.下载安装包     https://www.python.org/downloads/ 2.安装     默认安装路径:C:\pyth ...

  9. 【hihocoder 1312】搜索三·启发式搜索(启发式搜索写法)

    [题目链接]:http://hihocoder.com/problemset/problem/1312?sid=1092363 [题意] [题解] 定义一个A*函数 f = step+val 这里的v ...

  10. 模拟ArrayList底层实现

    package chengbaoDemo; import java.util.ArrayList; import java.util.Arrays; import comman.Human; /** ...