习题如下:

其中核心段落在于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. 结队编程-基于gui的四则运算生成器
  2. springboot 热部署 idea版本(转)
  3. php简单创建多级目录
  4. CF1365G Secure Password(构造,交互,二进制分组)
  5. android 添加随意拖动的桌面悬浮窗口,android 添加随意拖动的桌面悬浮窗口
  6. Practical Mathematical Handwriting
  7. 测试的第三重境界:挑战零缺陷
  8. ubuntu14.04中安装opencv2.4.11
  9. acm杭州电子科技大学新生赛
  10. Linux使用 tar命令-g参数进行增量+差异备份、还原文件
  11. 网吧操作系统制作和优化的经验
  12. 年底绩效考核,领导让我背「C」
  13. C语言求n的阶乘(n!)
  14. c/c++原子锁应用(跨平台)
  15. css如何触碰缓慢变化
  16. 3D游戏角色模型的简单制作流程
  17. unity3d的playmaker插件使用教程,五、进入区域改变平台颜色
  18. anovan matlab,matlab函数之anova用法
  19. 最新golang语言面试题总结(一)
  20. 室内定位方案之蓝牙定位+IBeacon室内定位技术解决方案-新导智能

热门文章

  1. java jpress,JPress导入Eclipse
  2. jpress连接数据库mysql_通过Tomcat jpress连接不到数据库
  3. nginx本地代理调试微信登录(window版本)
  4. 用matlab求摆线,求由摆线x=a(t-sint),y=a(1-cost)的一拱(0≦t≦2π)与x轴所围成的图形面积...
  5. 微信小程序使用后台播放器播放音乐
  6. MongoDB数据库开发环境搭建与配置,Windows环境下
  7. 使用AWS Comprehend进行情感分析
  8. MySQL数据库基础详解(非原创)
  9. 数据结构-栈详解(大概)
  10. java 车牌号归属地_本地化JavaAnpr用于本地的车牌