邓俊辉 数据结构 习题4-18 Fermat-Lagrange定理代码实现
习题如下:
其中核心段落在于void Lagrange(int n)函数,其中有针对a)的简化版,更容易理解,如有需要可与我联系
#include "Stack.h"struct Po {int base;Po(int i = 1) :base(i) {}friend int operator+(int a, Po b);friend int operator*(int a, Po b);
};int operator+(int a, Po b) {return a + std::pow(b.base, 2);}int operator*(int a, Po b) { return a * std::pow(b.base, 2); }ostream& operator<<(ostream& out, Stack<Po>& stk)
{out << "{ ";for (int i = 0; i < stk.size(); ++i) {out << stk[i].base;i == stk.size()-1 ? out << " " : out << ", ";}out << "}" << "^2";return out;
}int sum(Stack<Po>& stk) {int sum = 0;for (int i = 0; i < stk.size(); ++i) { sum = sum + stk[i]; }return sum;
}void backTrack(Po& p, Stack<Po>& stk) {//if (stk.size() < 2) return;//防火墙stk.pop();p.base = ++(stk.top()).base;
}void Langrange(int n) {Po p(0);//默认从0^2开始Stack<Po> stk;//从(0,0,0,0)这种初始情况开始for (int i = 0; i < 4; ++i) { stk.push(p); }//stk.push(p); stk.push(p); stk.push(p); p.base = 3; stk.push(p);std::vector<Stack<Po>> pv;//只要栈元素和不等于n就继续寻找,循环中又分为<n、>n两种情况int _sum;while ( (_sum = sum(stk)) != n && (4 * stk[0]) <= n) {//如果栈元素和<n,就需要试探将栈顶递增或入栈新元素(栈未满时)if (_sum < n) {if (stk.size() < 4) { stk.push(p); }//如果栈未满就将p入栈else { ++stk.top().base; }//如果栈满,则栈顶递增}//如果栈元素和>n,那么就需要回溯了,即次栈顶递增else {backTrack(p, stk);}//如果栈元素总和==nif (sum(stk) == n) {//未满,此时也需要回溯(backTrack)if (stk.size() != 4) {backTrack(p, stk);}//已满,一个解加入向量,回溯,探寻下一个解else { pv.push_back(stk); backTrack(p, stk);}}}cout << "n: " << n << " ";for (std::vector<Stack<Po>>::iterator it = pv.begin(); it != pv.end(); ++it) { cout << *it<<" "; }cout << endl;
}
邓俊辉 数据结构 习题4-18 Fermat-Lagrange定理代码实现相关推荐
- 学堂在线-邓俊辉-数据结构-习题解析PDF一页版本
官网下载的是打开后两页的,我不习惯,改成了一般打开后一页的,看是否有人也需要,失效了请提醒,会第一时间补充.(侵删) 链接:https://pan.baidu.com/s/1a7mYA2hVV1JPu ...
- 清华大学邓俊辉-数据结构MOOC笔记-树的概念及逻辑表示
清华大学邓俊辉-数据结构MOOC笔记-树的概念及逻辑表示 有关概念: 与图论略有不同,数据结构中的树:1.需要为每一颗树指定一个特殊的顶点,作为"根"(root),对应rooted ...
- 邓俊辉数据结构学习-3-栈
栈的学习 栈的应用场合 逆序输出 输出次序与处理过程颠倒,递归深度和输出长度不易预知 不是很理解 实例:进制转换 大致思路:对于进制转换,我们一般使用的都是长除法,因此要保存每次得到的余数,但是最后算 ...
- 邓俊辉数据结构学习心得系列——如何正确衡量一个算法的好坏
数据结构这门课主要关注如何设计合理的数据结构和算法,来简化时间复杂度和空间复杂度. 想要科学的解决这样一个优化的问题,最核心的思想也是最基础的,就是要量化问题.这也是将数学运用在实际问题中的一个基石. ...
- 邓俊辉数据结构学习心得系列——数据结构中所研究的算法
写在前面的话: 本文只是个人学习邓俊辉老师C++数据结构的整理,包含了很多个人的见解(从内容到材料的组织形式).所整理的内容不保证逻辑性和完整性,仅供参考. 算法的基本性质: 有正确的输入 有正确的输 ...
- 邓俊辉数据结构学习笔记3-二叉树
二叉树及其表示 树 有根树 从图论的角度看,树等价于连通无环图.因此与一般的图相同,树也由一组项点〈vertex)以及联接与其间的若干条边〈edge) 组成.在计算机科学中,往往还会在此基础上,再指定 ...
- 邓俊辉数据结构学习-7-BST
二叉搜索树(Binary-Search-Tree)--BST 要求:AVL树是BBST的一个种类,继承自BST,对于AVL树,不做太多掌握要求 四种旋转,旋转是BBST自平衡的基本,变换,主要掌握旋转 ...
- 邓俊辉 数据结构与算法C++版 第十三章 串 ADT
邓公数据结构与算法 第十三章 串 ADT 定义和特点 术语 ADT接口实现 模式匹配 问题与需求 算法测试方法 蛮力匹配 构思 蛮力匹配:版本1 蛮力匹配:版本2 蛮力匹配:性能分析 KMP算法 ne ...
- 邓俊辉数据结构学习笔记2
列表 typedef int Rank; //秩 #define ListNodePosi(T) ListNode<T>* //列表节点位置template<typename T&g ...
最新文章
- python 哈希表_哈希表哪家强?编程语言找你来帮忙!
- python numpy数组转换成列表方法 object.tolist()函数
- 软件测试作业4:测试要素
- 东莞城院c语言上机报告,浙大城市学院c语言上机试题
- 反序列化时恢复transient字段
- typescript 怎么表示当前时间减一个月_吃什么减肚子最快最有效 4种刮油食物吃出小蛮腰...
- 2014-08-06 小代码,大道理
- Wet Shark and Two Subsequences
- excel处理html文件,html网页显示excel表格数据-html读取本地excel文件并展示
- Labview视觉模块安装
- 基于ueditor 扩展的电子病历编辑器
- php微信定位功能,JavaScript微信定位功能实现方法
- 未明学院:还没入职就被“裁员”,大批应届生遭千亿巨头强制解约! Sorry,秋招 Offer 我们决定撤回…
- 计算机主板chipset中的北桥和南桥
- vue-qq 实践(一)
- CMM是什么?什么是 “能力成熟度模型”?
- 通用电工实验室设备QY-DG28A
- linux环境中英文切换配置以及乱码问题
- 《Occlusion Aware Facial Expression RecognitionUsing CNN With Attention Mechanism》论文阅读(2019TIP)
- ICE之Slice语言