IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 邓俊辉 数据结构 习题4-18 Fermat-Lagrange定理代码实现 -> 正文阅读

[数据结构与算法]邓俊辉 数据结构 习题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);}
		//如果栈元素总和==n
		if (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;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:44:08  更:2021-12-24 18:45:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:34:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码