随笔分类 - C 算法分析
摘要:前一段时间遇到了一个算法题,印象非常深刻,题目也很简单: 一个人上楼梯,可以一次跨一阶楼梯,也可以一次跨两阶,但是最多一次跨三阶楼梯,请问,在 n 层楼梯的条件下,一个人上楼梯总共有几种方式? 举个例子: 比方说有 1 层楼梯,一个人只能跨一阶上去,也就是只有 1 种上楼梯的方法; ...
阅读全文
摘要:如果想求 100 以内的全部素数,该怎么办呢?来看看解决方案: 第一种貌似是最直观的,即:若一个数 m 不能被 2 ~ m-1 之间的任何整数整除的话,就表明它是一个素数(Prime Number),程序如下: #include "stdio.h" void main() { /*求 100 以内的...
阅读全文
摘要:所谓的选择排序,指的是把一组杂乱无章的数据按照大小顺序排序,选择排序所采用的方法是:首先找到值最小的元素,然后把这个元素与第一个元素交换,这样,值最小的元素就放到了第一个位置,接着,再从剩下的元素中找到值最小的,把它和第二个元素互换,使得第二个元素放在第二的位置上面,以此类推,直到所有的值由小到大顺...
阅读全文
摘要:对于这个问题,我们首先要提取最后一个数字输出,这可用取模 10 的余数来求得,然后去掉最低位再取模 10 的余数就得到此低位,以此类推便可得到整数数字的反序输出。 来看看 C 语言的 do-while 语句以及 while 语句的实现方法: #include "stdio.h" void main(...
阅读全文
摘要:前几天复习了一下对分查找(Binary Search),它提供了在 O(log N) 时间内的 Find (查找操作),先来看看对分查找的叙述要求: 给定一个整数 X 和整数 ,后者已经预先排序,并且已经在内存中,求使得 的下标 i ,如果 X 不在数据之中,则返回 i = -1。 来看...
阅读全文
摘要:这两天看了看最大子序列问题,顺便的做一下笔记,最大子序列问题相信大家都再熟悉不过了,来回顾一下问题: 给定整数(可能有负数),求的最大值(为方便起见,如果所有整数均为负数,则最大子序列和为 0 )。 下面来看三种实现方法: 1,使用两层 for 循环,算法复杂度显然是 O(N²): int M...
阅读全文
摘要:如题: 有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,只能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编...
阅读全文
摘要:斐波那契(Fabonacci)序列起源于中世纪的意大利,问题是这样给出的:假定每对兔子每个月生出新的一对兔子来,新的每对兔子过两个月就可以生育。其次,这些兔子都不死,这样第一个月有一对兔子,第二个月有两对兔子,第三个月有三对兔子(第一个月的一对兔子又生了一对),第四个月有五对兔子(第二个月已有的两对...
阅读全文
摘要:法则 1:FOR 循环 一次 for 循环的运行时间至多是该 for 循环内语句(包括测试)的运行时间乘以迭代的运行时间。 法则 2:嵌套的 for 循环 从里向外分析这些循环。在一组嵌套循环的内部的一条语句总的运行时间为该语句的运行时间乘以该组所有的 for 循环的大小的乘...
阅读全文

浙公网安备 33010602011771号