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

计算完全平方根可以使用math库中的sqrt完成,但需要注意以下几点:a取值应为1-9,b取值为0-9;完全平方得到的结果是浮点型,
因为浮点型不像整形可能有误差的存在(TODO:浮点型计算误差),可以使用floor(sqrt(x)+0.5)来减小误差,这里稍微展开说下:如果sqrt(x)的结果本来是1,由于浮点计算的误差导致结果
为0.9999,那么cast到int型其结果就是0,因此用四舍五入的方式来减少这种误差(这涉及到浮点型的精度问题,如果精度较高的浮点表示,
那计算结果于预期的波动会相对较小,否则就可能存在较大偏差,当然现代编程语言的精度是可以适用这种方式的)

for (int a = 1; a<=9; a++) {
    for (int b = 0; b<=9; b++) {
        int n = 1100 * a + 11 * b;
        int m = floor(sqrt(a) + 0.5);
        if (m * m == n) printf("%d ", n);
    }
}

要去考虑误差略嫌麻烦,可以使用枚举的方式并根据aabb的特性去考虑它的千位百位以及十位个位是否分别相等

for (int i=31; ; i++) {  // 31^2为最大的小于1000的平方整数
    int n = i * i;
    if (n > 9999) break;

    int a = n / 100;
    int b = n % 100;
    if (a/10 == a%10 && b/10 == b%10) printf("%d", n);
}

摘录自<<算法竞赛入门经典>>

原文地址:https://www.cnblogs.com/giantRan/p/11118423.html

时间: 2024-10-10 13:25:52

输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数字也相等)的相关文章

2016/1/10 作业 1, 二维数组遍历输出求和 2,转置运算???? 3,九宫格?? 后两个存在问题

1 public class arr1 { 2 3 4 public static void main(String[] args) { 5 // 创建二维数组arr[][],输出二维数组所有元素的和. 6 7 int arr[][]={{1,3,5,7,9},{21,23,25,27,29}, 8 {12,14,16,18},{32,34,36,38}}; 9 int sum=0; 10 System.out.println("二维数组遍历"); 11 // for循环 遍历 求和

课后作业 06 -- 小数后几位精确判断并输出

Console.Write("输入您要精确的小数:"); string strA = Console.ReadLine(); Console.Write("您要精确到几位小数:"); int k = int.Parse(Console.ReadLine()); double n = Convert.ToDouble(strA); int i = strA.IndexOf(".");//确定小数索引位置 string strB = string.E

3085 相同的后三位

3085 相同的后三位 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 青铜 Bronze 题目描述 Description 对于给定的p,编写程序求最小正整数m,n(0<n<m)为何值时,pm与pn的最后三位数字相同. 输入描述 Input Description 一个正整数p(100≤p≤9999) 输出描述 Output Description 一行,最小的m和n,m和n用空格隔开.如有多组,输出最小的m那组. 样例输入 Sample Input 100 样例输出 Sa

已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数。

描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数. 输入 第一行为M,表示测试数据组数.接下来M行,每行包含一个测试数据. 输出 输出M行,每行为对应行的n-1位数(忽略前缀0).如果除了最高位外,其余位都为0,则输出0. 样例输入 4 1023 5923 923 1000 样例输出 23 923 23 0我的程序: #include<iostream>#include<vector>#include<cmat

求随机数,按后三位排序

编写程序实现以下功能:    //随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999).对数组进行排序,要求按每个数的后三位的大小进 行升序排列,然后取出满足此条件的前10个数放入数组b中,如果后三位的数值相等,则按原先的数值进行降序排列.最后输出数组b的内容 #import <Foundation/Foundation.h>int value(int x){ //如何求出5609 的后三位数    int y = x /1000;    int c

一个简单的时间片轮转多道程序内核代码分析 (学号后三位418)

一.基于mykernel的基本Linux内核分析 1.我们按照老师在github上给出的步骤在实验楼上启动最高小内核,可以看到如下现象 在窗口中我们可以看到一个内核以及运行起来了,比较简单的内核,只时不停的输出一些字符串,>>>>>>my_time_handler here<<<<<<<和my_start_kernel here和一些计数.这时因为我们并没有加入其他的代码,再次基础上我们可以加入我们主机要实现的功能. 在myin

如何从日期对象python获取以毫秒(秒后3位小数)为单位的时间值?

要获取具有毫秒(秒后3位小数)的日期字符串,请使用以下命令: from datetime import datetime print datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] 输出2018-10-04 10:18:32.926 %f 显示毫秒 要在python中获得毫秒,请使用以下代码. import datetime # 获得当前时间 now=datetime.datetime.now() #2019-04-11 14:18

5北京某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第一位数字不是0.校外电话又分为本市电话和外地电话两类。拨校外电话需要先拨0,若是本市电话则接着拨8位数字(第一位不是0),若是外地电话则拨3位区码后再拨8位电话号码(第一位不是0)。

答: 电话号码=[校内电话号码|校外电话号码] 校内电话号码=非零数字+3位数字 校外电话号码=[本市号码|外地号码] 本市号码=数字零+8位数字 外地号码=数字零+3位数字+8位数字 非零数字=[1|2|3|4|5|6|7|8|9] 数字零=0 3位数字=3{数字}3 8位数字=非零数字+7位数字 7位数字=7{数字}7 数字=[0|1|2|3|4|5|6|7|8|9] 其中,[ ]意思是或,从校内电话号码或校外电话号码中选择一个:{ }表示重复,两边的数字表示重复次数的下限和上限:=意思是定

php正则匹配用户名必须包含字母和数字且大于6位

php正则匹配用户名必须包含字母和数字且大于6位 UEditor 1.4.3版本中去掉本地自动保存功能 右键菜单没有新建文本文档txt 常见HTTP错误代码大全 http常见状态码 eclipse内存溢出错误 为什么井盖是圆的?--揭开面试题的神秘面目! Linux Centos 6.6搭建SFTP服务器 密码强度检测 JS判断检测用户输入密码强度代码 对程序员来说,提高薪水最好的建议是什么? CSS3仿淘宝右侧固定导航悬浮层 jQuery仿淘宝网登录拖动滑块验证码代码 jQuery单击div更