零碎的算法笔记(1)

简介: 零碎的算法笔记(1)

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,可以表示当前要输出的变量是否为第一个。第一个变量前不应有空格,但其他变量都有。

相关文章
|
2月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
2月前
|
机器学习/深度学习 存储 算法
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
|
4月前
|
搜索推荐
排序算法笔记
排序算法笔记
23 0
|
2月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--快速排序
数据结构与算法(Java篇)笔记--快速排序
|
2月前
|
机器学习/深度学习 算法 搜索推荐
数据结构与算法(Java篇)笔记--归并排序
数据结构与算法(Java篇)笔记--归并排序
|
2月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--选择排序
数据结构与算法(Java篇)笔记--选择排序
|
3月前
|
存储 搜索推荐 算法
【排序】软考笔记:简要回顾下常见的几种排序算法
【排序】软考笔记:简要回顾下常见的几种排序算法
43 0
【排序】软考笔记:简要回顾下常见的几种排序算法
|
3月前
|
存储 算法 Java
数据结构与算法笔记(一)
数据结构与算法笔记(一)
104 0
|
4月前
|
算法
链表算法笔记
链表算法笔记
22 0
|
4月前
|
XML 算法 前端开发
北大陈斌Python算法笔记(二)
北大陈斌Python算法笔记(二)
35 0