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

相关文章
|
3月前
|
算法
计算机算法设计与分析(1-6章 复习笔记)
计算机算法设计与分析(1-6章 复习笔记)
|
3月前
|
算法 C++
算法笔记:递归(c++实现)
算法笔记:递归(c++实现)
|
3月前
|
存储 算法 Java
技术笔记:JVM的垃圾回收机制总结(垃圾收集、回收算法、垃圾回收器)
技术笔记:JVM的垃圾回收机制总结(垃圾收集、回收算法、垃圾回收器)
38 1
|
3月前
|
机器学习/深度学习 算法 BI
机器学习笔记(一) 感知机算法 之 原理篇
机器学习笔记(一) 感知机算法 之 原理篇
|
3月前
|
算法 Java 索引
12.12_黑马数据结构与算法笔记Java
12.12_黑马数据结构与算法笔记Java
28 1
|
2月前
|
存储 算法 C语言
软考中级之数据库系统工程师笔记总结(二)数据结构与算法
软考中级之数据库系统工程师笔记总结(二)数据结构与算法
20 0
|
2月前
|
存储 算法 程序员
|
3月前
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
31 0
|
3月前
|
Java BI C#
技术笔记:SM4加密算法实现Java和C#相互加密解密
技术笔记:SM4加密算法实现Java和C#相互加密解密
46 0
|
3月前
|
存储 人工智能 算法
程序与技术分享:Acwing算法笔记
程序与技术分享:Acwing算法笔记