算法课习题汇总(2)

news/2024/9/21 1:00:56/

整数划分问题

将正整数n表示成一系列正整数之和,n=n1+n2+…+nk(n1>=n2>=…>=nk,k>=1)。正整数n的这种表示称为正整数n的划分。

思路:

n表示待划分数,m表示最大减数。请添加图片描述

#include<iostream>
using namespace std;int q(int n, int m)
{if (m == 1)return 1;if (m > n)return q(n, n);if (n == m)return q(n, n-1) + 1;return q(n - m, m) + q(n, m-1);
}int main()
{int n = 0;cin >> n;cout << q(n, n) << endl;return 0;
}

在这里插入图片描述

Hanoi问题 T(n)=2^n-1

具体看:汉诺塔问题

#include<iostream>
using namespace std;void move(char A, char B)
{cout << A <<"->" << B << endl;
}void hanoi(int n, char A, char B, char C)
{if (n == 0)return;hanoi(n - 1, A, C, B);move(A, B);hanoi(n - 1, C, B, A);
}int main()
{int n = 0;cin >> n;hanoi(n,'A','B','C');return 0;
}

在这里插入图片描述

二分搜索 O(n)=nlogn

int Search(int* arr, int x, int n)
{int left = 0;int right = n;while (left <= right){int mid = left + (right - left) / 2;if (x == arr[mid])return mid;else if (x > arr[mid])left = mid + 1;elseright = mid - 1;}return -1;
}int main()
{int n = 0;cin >> n;int arr[1000];for (int i = 0; i < n; i++)cin >> arr[i];cout << Search(arr, 5, n - 1) << endl;return 0;
}

在这里插入图片描述

合并排序 O(n)=nlogn

#include<iostream>
using namespace std;void Merge(int* arr, int l, int r)
{if (l == r)return;int mid = l + (r - l) / 2;Merge(arr, l, mid);Merge(arr, mid + 1, r);int i = l, j = mid + 1, k = l;int arr2[10000] = {0};while (i <= mid && j <= r){if (arr[i] >= arr[j]){arr2[k++] = arr[j++];}else{arr2[k++] = arr[i++];}}while (i <= mid){arr2[k++] = arr[i++];}while (j <= r){arr2[k++] = arr[j++];}for (i = l; i <= r; i++){arr[i] = arr2[i];}
}int main()
{int n;cin >> n;int arr[10000];for (int i = 0; i < n; i++)cin >> arr[i];Merge(arr, 0, n - 1);for (int i = 0; i < n; i++)cout << arr[i]<<" ";cout << endl;return 0;
}

在这里插入图片描述

快速排序 O(n)=nlogn

#include<iostream>
using namespace std;void q(int* arr, int l, int r)
{if (l >= r)return;int mid=l+(r-l)/2;swap(arr[1], arr[mid]);int tmp = arr[1];int i = l, j = r;while (1){while (i < j && arr[j] >= tmp)j--;while (i < j && arr[i] <= tmp)i++;if (i >= j)break;swap(arr[i], arr[j]);}swap(arr[i],arr[1]);q(arr, l, i - 1);q(arr, i + 1, r);
}int main()
{int n;cin >> n;int arr[100];for (int i = 0; i < n; i++)cin >> arr[i];q(arr, 0, n - 1);for (int i = 0; i < n; i++)cout << arr[i]<<" ";cout << endl;return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/1528159.html

相关文章

王道408考研数据结构-串-第四章

4.2 串的模式匹配 4.2.1 简单的模式匹配算法 子串的定位操作通常称为串的模式匹配&#xff0c;它求的是子串(常称模式串)在主串中的位置。这里采用定长顺序存储结构&#xff0c;给出一种不依赖于其他串操作的暴力匹配算法。 int Index(SString s,SString T){int i1,j1;whil…

Redis 主从复制配置教程

1. 什么是 Redis 主从复制 Redis 主从复制&#xff08;Master-Slave Replication&#xff09;允许一个 Redis 实例作为主节点&#xff08;Master&#xff09;&#xff0c;多个 Redis 实例作为从节点&#xff08;Slave&#xff09;&#xff0c;从节点会自动同步主节点的数据&am…

认知小文2《成功之路:习惯、学习与实践》

内容摘要&#xff1a; 在这个充满机遇的时代&#xff0c;成功不再是偶然&#xff0c;而是可以通过培养良好习惯、持续学习和实践来实现的目标。    一、肌肉记忆&#xff1a;技能的基石 成功往往需要像运动员一样&#xff0c;通过日复一日的练习来形成肌肉记忆。无论是健身…

人工智能安全治理新篇章:《2024人工智能安全治理框架1.0版》深度解读@附20页PDF文件下载

在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度融入我们的日常生活&#xff0c;从智能助手到自动驾驶&#xff0c;从医疗诊断到金融风控&#xff0c;AI的身影无处不在。然而&#xff0c;技术的双刃剑特性也让我们不得不面对…

WGCAT工单系统 v1.2.1 支持导出PDF和分享创建工单功能

官网下载&#xff1a;www.wgstart.com WGCAT-v1.2.1 更新说明&#xff0c;2024-09-15发布 1. 新增&#xff0c;工单数据支持导出为PDF文件 2. 新增&#xff0c;可以分享给其他人创建工单&#xff0c;分享创建工单的链接不需要登录&#xff0c;直接可以提交工单数据&#xff0c;…

线性系统分析

一、定义 (1)叠加性 若 且 则称该系统具有叠加性。 叠加性:系统的一个输入不影响系统对其他输入的响应。 (2)均匀性 若 对任意常数a下式都成立 则称该系统具有均匀性。 均匀性:系统能够保持对输入信号的缩放因子不变。 (3)线性系统 若一个系统同时具有叠加性和…

代码随想录刷题day32丨动态规划理论基础,509. 斐波那契数, 70. 爬楼梯, 746. 使用最小花费爬楼梯

代码随想录刷题day32丨动态规划理论基础&#xff0c;509. 斐波那契数&#xff0c; 70. 爬楼梯&#xff0c; 746. 使用最小花费爬楼梯 1.动态规划理论基础 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题…

nginx的反向代理和负载均衡

方向代理 把监听到的http://localhost:80/api/反向代理到 http://webservers/admin/ # 反向代理,处理管理端发送的请求location /api/ {#proxy_pass http://localhost:8080/admin/;proxy_pass http://webservers/admin/;}负载均衡 反向代理到 webservers 按照一定的权重进行…