栏目分类:
子分类:
返回
答学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
答学网 > IT > 软件开发 > 游戏开发 > Cocos2d-x

零碎的算法笔记(1)

Cocos2d-x 更新时间: 发布时间: IT归档 最新发布 模块sitemap

零碎的算法笔记(1)

From算法竞赛入门经典 第2版
  • 1.判断 n 是否为完全平方数
  • 2. 比较大的数组应尽量声明在 main 函数外,否则程序可能无法运行
  • 3.开灯问题

1.判断 n 是否为完全平方数
可以先求出其平方根,然后看它是否为整数,即用一个 int 型变量 m 存储 sqrt(n)四舍五入后的整数,然后判断 m*m 是否等于 n

可不可以这样写?
(直接判断 sqrt(n)是否为整数。)

if(sqrt(n) == floor(sqrt(n))) 
	printf("%d是完全平方数n", n)

理论上当然没问题,但这样写不保险,因为浮点数的运算(和函数)有可能存在误差。

假设在经过大量计算后,由于误差的影响,整数 1 变成了 0.9999999999,floor 的结果会是 0 而不是 1。为了减小误差的影响,一般改成四舍五入,即 floor(x+0.5)。如果难以理解,可以想象成在数轴上把一个单位区间往左移动 0.5 个单位的距离。floor(x)等于 1 的区间为[1,2),而 floor(x+0.5)等于 1 的区间为[0.5, 1.5)

2. 比较大的数组应尽量声明在 main 函数外,否则程序可能无法运行 3.开灯问题

题目:有 n 盏灯,编号为 1~n。第 1 个人把所有灯打开,第 2 个人按下所有编号为
2 的倍数的开关(这些灯将被关掉),第 3 个人按下所有编号为 3 的倍数的开关(其中关掉
的灯将被打开,开着的灯将被关闭),依此类推。一共有 k 个人,问最后有哪些灯开着?
输入 n 和 k,输出开着的灯的编号。k≤n≤1000


虽然也能用for 循环把arr清零,但是用 memset 又方便又快捷。另一个技巧在输出:为了避免输出多余空格,设置了一个标志变量 first,可以表示当前要输出的变量是否为第一个。第一个变量前不应有空格,但其他变量都有。

转载请注明:文章转载自 www.dxzl8.com
本文地址:http://www.dxzl8.com/it/1475829.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 湖北籽麟网络科技有限公司

ICP备案号:鄂ICP备19019357号-23