习题如下:

其中核心段落在于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定理代码实现相关推荐

  1. 学堂在线-邓俊辉-数据结构-习题解析PDF一页版本

    官网下载的是打开后两页的,我不习惯,改成了一般打开后一页的,看是否有人也需要,失效了请提醒,会第一时间补充.(侵删) 链接:https://pan.baidu.com/s/1a7mYA2hVV1JPu ...

  2. 清华大学邓俊辉-数据结构MOOC笔记-树的概念及逻辑表示

    清华大学邓俊辉-数据结构MOOC笔记-树的概念及逻辑表示 有关概念: 与图论略有不同,数据结构中的树:1.需要为每一颗树指定一个特殊的顶点,作为"根"(root),对应rooted ...

  3. 邓俊辉数据结构学习-3-栈

    栈的学习 栈的应用场合 逆序输出 输出次序与处理过程颠倒,递归深度和输出长度不易预知 不是很理解 实例:进制转换 大致思路:对于进制转换,我们一般使用的都是长除法,因此要保存每次得到的余数,但是最后算 ...

  4. 邓俊辉数据结构学习心得系列——如何正确衡量一个算法的好坏

    数据结构这门课主要关注如何设计合理的数据结构和算法,来简化时间复杂度和空间复杂度. 想要科学的解决这样一个优化的问题,最核心的思想也是最基础的,就是要量化问题.这也是将数学运用在实际问题中的一个基石. ...

  5. 邓俊辉数据结构学习心得系列——数据结构中所研究的算法

    写在前面的话: 本文只是个人学习邓俊辉老师C++数据结构的整理,包含了很多个人的见解(从内容到材料的组织形式).所整理的内容不保证逻辑性和完整性,仅供参考. 算法的基本性质: 有正确的输入 有正确的输 ...

  6. 邓俊辉数据结构学习笔记3-二叉树

    二叉树及其表示 树 有根树 从图论的角度看,树等价于连通无环图.因此与一般的图相同,树也由一组项点〈vertex)以及联接与其间的若干条边〈edge) 组成.在计算机科学中,往往还会在此基础上,再指定 ...

  7. 邓俊辉数据结构学习-7-BST

    二叉搜索树(Binary-Search-Tree)--BST 要求:AVL树是BBST的一个种类,继承自BST,对于AVL树,不做太多掌握要求 四种旋转,旋转是BBST自平衡的基本,变换,主要掌握旋转 ...

  8. 邓俊辉 数据结构与算法C++版 第十三章 串 ADT

    邓公数据结构与算法 第十三章 串 ADT 定义和特点 术语 ADT接口实现 模式匹配 问题与需求 算法测试方法 蛮力匹配 构思 蛮力匹配:版本1 蛮力匹配:版本2 蛮力匹配:性能分析 KMP算法 ne ...

  9. 邓俊辉数据结构学习笔记2

    列表 typedef int Rank; //秩 #define ListNodePosi(T) ListNode<T>* //列表节点位置template<typename T&g ...

最新文章

  1. python 哈希表_哈希表哪家强?编程语言找你来帮忙!
  2. python numpy数组转换成列表方法 object.tolist()函数
  3. 软件测试作业4:测试要素
  4. 东莞城院c语言上机报告,浙大城市学院c语言上机试题
  5. 反序列化时恢复transient字段
  6. typescript 怎么表示当前时间减一个月_吃什么减肚子最快最有效 4种刮油食物吃出小蛮腰...
  7. 2014-08-06 小代码,大道理
  8. Wet Shark and Two Subsequences
  9. excel处理html文件,html网页显示excel表格数据-html读取本地excel文件并展示
  10. Labview视觉模块安装
  11. 基于ueditor 扩展的电子病历编辑器
  12. php微信定位功能,JavaScript微信定位功能实现方法
  13. 未明学院:还没入职就被“裁员”,大批应届生遭千亿巨头强制解约! Sorry,秋招 Offer 我们决定撤回…
  14. 计算机主板chipset中的北桥和南桥
  15. vue-qq 实践(一)
  16. CMM是什么?什么是 “能力成熟度模型”?
  17. 通用电工实验室设备QY-DG28A
  18. linux环境中英文切换配置以及乱码问题
  19. 《Occlusion Aware Facial Expression RecognitionUsing CNN With Attention Mechanism》论文阅读(2019TIP)
  20. ICE之Slice语言

热门文章

  1. 全球机场与航空公司准点率数据报告,为五一小长假做足准备
  2. hapi.js入门系列(二)——路由
  3. linux硬盘速度测试方法
  4. PCB板层简介+走线
  5. Altium Designer PCB板框扩大
  6. SVL-VI SLAM
  7. 美团笔试(测试开发)
  8. LAN9252/3 EtherCAT module
  9. 好听的歌曲单片机c语言程序,单片机音乐播放C语言程序
  10. 史上最强Js流程控制三大结构