随笔分类 -  算法

摘要:算法内容: 一个元素在一个序列中的名次,是所有比它小的元素个数加上在它左边出现的与它相同的元素个数。 代码: 1 template <typename T> 2 void the_rank(const T* a, int n, T* r) { 3 for (int i = 0; i < n; ++i 阅读全文
posted @ 2020-02-25 23:18 Hello_Nolan 阅读(660) 评论(0) 推荐(0)
摘要:题目: 编写一个模板递归函数,确定元素 x 是否属于数组a [ 0 : n - 1 ]。 思路: 题目中没有说数组有序,那么默认为无序数组,应该用线性查找。同时是递归的,就应该从头或尾一个一个比较,相等时返回找到,否则递归调用函数,传入参数是数组,并且元素个数少一个。 函数退出的条件有两个: 1. 阅读全文
posted @ 2020-02-21 20:39 Hello_Nolan 阅读(796) 评论(0) 推荐(0)
摘要:题目: 编写递归函数GCD(x,y),计算最大公约数。测试你的代码。 思路: 最大公约数的数学原理暂时略去不谈,只按照算法讲解代码思路。该算法计算两个数的最大公约数,函数需要两个参数,返回值是它们的最大公约数。现在有两个数 10 和 5, 传入函数,发现两个数都不为 0, 于是进行递归,将后面的数( 阅读全文
posted @ 2020-02-20 18:49 Hello_Nolan 阅读(369) 评论(0) 推荐(0)
摘要:题目: 编写非递归函数计算斐波那契数 Fn 。对于每一个斐波那契数,你的代码应该只计算一次。测试你的代码。 思路: 非递归算法,要从正向进行迭代计算。我们统一一下定义:数列从 1 开始,即F(1) = 1, F(2) = 1。 利用三个变量:fib_front,fib_behind, fib。顾名思 阅读全文
posted @ 2020-02-18 19:11 Hello_Nolan 阅读(747) 评论(0) 推荐(0)
摘要:题目: 编写递归函数计算斐波那契数 Fn 。测试你的代码。 思路: 正常思路即可。 代码: 1 #include <iostream> 2 using namespace std; 3 4 long long fib_recursion (int n) { 5 if (0 == n || 1 == 阅读全文
posted @ 2020-02-18 18:02 Hello_Nolan 阅读(221) 评论(0) 推荐(0)
摘要:题目: 编写非递归函数计算 n!。测试你的代码。 思路: 首先,计算阶乘可以使用递归函数,代码如下: 1 long long factorial_recursion (int n) { 2 if (n <= 1) { 3 return 1; 4 } else { 5 return n * facto 阅读全文
posted @ 2020-02-18 15:53 Hello_Nolan 阅读(1341) 评论(0) 推荐(0)
摘要:题目: 编写一个模板函数 change_length_1d,它将一个一维数组的长度从 old_length 变成 new_length。函数首先分配一个新的,长度为 new_length 的数组,然后把原数组的前 min { old_length , new_length } 个元素复制到新数组中, 阅读全文
posted @ 2020-02-15 17:45 Hello_Nolan 阅读(399) 评论(0) 推荐(0)
摘要:题目: 为程序make_2d_array 编写一个通用型算法,它的第三个参数不是整数 col_number,而是一维数组row_size。它创建一个二维数组,第 i 行的列数是 row_size [ i ]。 思路: 本题需要改变的是列数,也就是说,每行的元素个数可以不同,把这些元素个数存储在数组 阅读全文
posted @ 2020-02-15 16:20 Hello_Nolan 阅读(264) 评论(0) 推荐(0)
摘要:本篇讨论数组与指针之间的关系,分别以一维数组与二维数组为例进行说明。 一. 一维数组。 首先,让我们明确以下两点: 第一,数组名是一个固定的东西,它只能代表一个数组,也就是说,不允许这个数组名在后面又去表示另一个数组。 第二,数组名是一个指针,并且是一个常量指针。 现有一条语句: array[2] 阅读全文
posted @ 2020-02-14 22:07 Hello_Nolan 阅读(1323) 评论(0) 推荐(0)
摘要:题目: 编写一个模板函数 mismatch,返回值是使不等式 a[i] ≠ b[i]成立的最小索引 i ,0 ≤ i < n 。 思路: 传入两个数组(假定两数组元素个数相同,否则没有意义),依次比较元素即可。有不匹配时返回下标,完全匹配时返回 -1。 代码: 1 #include <iostrea 阅读全文
posted @ 2020-02-13 22:48 Hello_Nolan 阅读(129) 评论(0) 推荐(0)
摘要:题目: 编写一个模板函数 is_sorted,当且仅当a[0 : n - 1]有序时,返回值为 true。测试你的代码。 思路: 数组可以升序有序,也可以降序有序,也可以所有元素均相等。我假设,当数组元素只有一个,或者数组所有元素均相等的时候,数组自然有序。 数组升序降序是未知的,尤其是开头有元素相 阅读全文
posted @ 2020-02-13 22:27 Hello_Nolan 阅读(750) 评论(0) 推荐(0)
摘要:题目: 编写一个模板函数 iota , 使 a[i] += value 。测试你的代码。 思路: 正常思路即可,但是我不懂这个函数名字意义是什么。 注:本题目原书翻译有错,本人已修改正确。否则题目的意义不明。 代码: 1 #include <iostream> 2 using namespace s 阅读全文
posted @ 2020-02-13 20:32 Hello_Nolan 阅读(473) 评论(0) 推荐(0)
摘要:题目: 编写一个模板函数 inner_product,返回值是∑a[i]*b[i] (i 从 0到 n - 1)。测试你的代码。 思路: 由题可知,本函数计算的是两个数组的内积。内积一般是数字,如整数,浮点数。函数返回值应该设置为与数组元素相同类型。 代码: 1 #include <iostream 阅读全文
posted @ 2020-02-13 16:22 Hello_Nolan 阅读(2125) 评论(0) 推荐(0)
摘要:题目: 编写一个模板函数 fill,给数组a[start : end - 1]赋值 value。测试你的代码。 思路: 正常思路即可。当 start > end 时,进行交换,利用一下 new_swap() 函数。 代码: 1 #include <iostream> 2 using namespac 阅读全文
posted @ 2020-02-13 13:18 Hello_Nolan 阅读(486) 评论(0) 推荐(0)
摘要:题目: 编写一个模板函数 count,返回值是数组 a[0: n - 1]的数值个数。测试你的代码。 思路: 首先,函数计算数组个数,返回值应该是 size_t 类型,为了简单起见,将其设为 int 类型。 下面考虑函数参数。一般来说,涉及数组的问题,需要传入数组名和数组元素个数。这里需要详细说明一 阅读全文
posted @ 2020-02-13 12:44 Hello_Nolan 阅读(4660) 评论(0) 推荐(0)
摘要:题目: 解释为什么下面程序的交换函数没有把形参 x 和 y 所对应的实参的值交换。如何修改代码,使实参的值得到交换? 原交换程序: 1 void swap(int x, int y) { 2 int temp = x; 3 x = y; 4 y = temp; 5 } 思路: 在C++中,参数传递方 阅读全文
posted @ 2020-02-13 12:10 Hello_Nolan 阅读(393) 评论(0) 推荐(0)
摘要:题目: 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就 阅读全文
posted @ 2019-12-26 01:49 Hello_Nolan 阅读(163) 评论(0) 推荐(0)
摘要:题目: 读入 n(>)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正整数 n 第 2 行:第 1 个学生的姓名 学号 成绩 第 3 行:第 2 个学生的姓名 学号 成绩 ... ... ... 第 n+1 阅读全文
posted @ 2019-12-24 23:05 Hello_Nolan 阅读(148) 评论(0) 推荐(0)
摘要:题目: 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 ( 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题, 阅读全文
posted @ 2019-12-23 20:32 Hello_Nolan 阅读(133) 评论(0) 推荐(0)
摘要:题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 阅读全文
posted @ 2019-12-23 17:39 Hello_Nolan 阅读(211) 评论(0) 推荐(0)