![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法练习
hangshao0.0
道阻且长,行则降至。
展开
-
Python 代码实现迷宫问题(DFS 和 BFS)
虽然求最短路径更应该用 BFS ,但是本题限定了只有唯一解,所以可以使用 DFS原创 2023-03-07 13:44:15 · 1823 阅读 · 1 评论 -
回溯法解决8皇后问题(C++实现)
在8×8的棋盘中,同一行,同一列。同一斜线上只能有一个“皇后”棋子#include<iostream>using namespace std;#define MAX 8int queue[8], sum = 0;void output(){ for (int i = 0; i<MAX; i++) { cout << queue[i] + 1<< ' '; } cout << endl; sum++;}int check(原创 2020-06-26 17:10:57 · 1134 阅读 · 0 评论 -
动态规划求解最大路径长度和(C++实现)
类似这种数塔,求最大路径长度和,并且输出路径思路:从底层倒推上去,先合并最下面的两层,把n层数塔变成n-1层,以此类推code:#include<iostream>using namespace std;int main(){ int a[30][30][3], n, max; cout << "请输入数塔的层数:"; cin >> n; //初始化数塔 for (int i = 0; i < n; i++) for (int j原创 2020-06-25 23:14:20 · 1211 阅读 · 0 评论 -
一个正整数表示为n个连续正整数之和(C++实现)
问题:思路:因为n>=2,所以输入的S最小为3输入的S其实就是一个公差d=1的等差数列的和问题关键在于根据这个和求出等差数列的第一个数以及等差数列的长度a1 = aan = a + n - 1S = (a1 + an)n / 2 = (2a - 1 + n)*n / 2a = (2S/n-n+1)/2代码:#include <iostream>using namespace std;int main() { int S, a, n; //输入数据、序列起点原创 2020-06-13 20:17:59 · 4052 阅读 · 4 评论 -
五个人分别从事五项工作,求最佳安排使得效益最高(C++实现)
Problem:思路都在注释里面啦Code:#include <iostream>using namespace std;//a[i][j]表示第i个人做第j项工作的效益int a[][5] = { 10, 11, 10, 4, 7, 13, 10, 10, 8, 5, 5, 9, 7, 7, 4, 15, 12, 10, 11, 5, 10, 11, 8, 8, 4};// num[i] 对应当前第i个人选择方案的编号// g[i] 对应最高效益的第i原创 2020-06-13 17:45:37 · 1991 阅读 · 0 评论 -
M个加号插入到数字串中使得加和最小(C++实现)
有一个由数字1-9组成的数字串(长度不超过200),问如何将M(1<=M<=200)个加号插入这个数字串中,使得所形成的算术表达式的值最小。加号不能加在数字串的最前面或最末尾,也不应有两个或两个以上的加号相邻M的值一定小于数字串的长度例如:数字串79846,若需加入两个加号,则最佳方案是79+8+46,算术表达式的值为133。代码如下:#include<iostream>#include<algorithm>using namespace std;co原创 2020-06-13 16:15:36 · 1916 阅读 · 0 评论 -
Python-(生成由0到9组成的n位数字)
一个CTF题目需要爆破,但是呢,需要用到的爆破字典要求是4位数字组成的四位数单纯的循环输出并不能满足要求,因为4位数字都可以是0,每个四位数开头也可以是0这时,就要用到 zfill( ) 了str.zfill(width)width ---- 指定字符串的长度,原字符串右对齐,前面填充0start = int(input("请输入开始的数值:"))end = int(input("请输入结束的数值:"))num = int(input("请输入生成的位数:"))path = str(sta原创 2020-05-31 14:58:28 · 5672 阅读 · 0 评论 -
Python-list实现大数相乘
def multipy(n1,n2): print(n1) print(n2) n1.reverse() n2.reverse() # n3存储结果,长为len(n1) + len(n2) n3=[] for i0 in range(len(n1)+len(n2)): n3.append(0) for i1 in range(len(n1)): for i2 in range(len(n2)):原创 2020-05-15 10:02:54 · 381 阅读 · 0 评论 -
Python实现switch
Python中没有类似C++或者Java中的switch…case语句,可以使用多个if…elif…else进行模拟,但是这样的写法会让代码看起来很不“好看”,于是我们用字典来实现switch语句的功能,下面以PTA里的一个题目为例子吧。现在在学python,所以用python做了几道PTA的题目当作练习,python中不能用switch就是我在练习过程中才知道的。上题目上代码i = i...原创 2020-04-06 22:56:13 · 1467 阅读 · 0 评论 -
汉诺塔的递归与非递归(python代码实现)
递归实现def hanoi(n, a, b, c): if n == 1: print(a + '--->' + c) else: hanoi(n-1, a, c, b) print(a + '--->' + c) hanoi(n-1, b, a, c)hanoi(3, 'A', 'B', 'C')非递归实现def hanoi(n): tower_belong = [0] * n if原创 2020-05-15 15:02:37 · 4657 阅读 · 2 评论 -
受限的汉诺塔问题(C++实现)
假定三个柱子从左到右分别是A,B,C,要将A柱上的两个盘子移动到C柱上普通汉诺塔问题要求每次移动后,小盘子都在大盘子上面,在普通汉诺塔的基础上受限的汉诺塔要求每次移动盘子只能将盘子移动到中间的B柱上,或者从B柱上移走下面以n=2为例子,即开始A柱只有两个盘子常规汉诺塔步骤:小盘子:A>>>B大盘子:A>>>C小盘子:B>>>C首限汉诺塔步骤:小盘子:A>>>B小盘子:B>>>C大盘子:A&g原创 2020-05-11 22:39:29 · 1749 阅读 · 2 评论 -
动态规划法解决01背包问题(C++实现)
问题描述:给定n种商品和一个给定固定容量的背包。物品 i 的重量是W[ i ],价值为V[ i ],背包的容量为C。问应当如何选择装入背包中的物品,使得装入背包中的物品的总价值最大?(对于同一个物品,要么放,要么不放,不能把物品放入背包多次,也不能将物品分割后部分装入,因此该问题称为 0 - 1背包问题)#include<iostream>#include<algorithm>#include<vector>using namespace std;int t原创 2020-06-06 13:23:31 · 4120 阅读 · 0 评论