
算法
7900X
用力奔跑才能尽情呼吸
展开
-
写一个函数找出一个整数数组中,第二大的数
扩展问题:写一个函数找出一个整数数组中,第k大的数(堆排序)考虑的情况:数组长度<2数组元素全部相同第二大值不止一个代码实现:实现1:/** * 实现: 返回第二大值 * 1. 数组长度小于2,不存在第二大的值,返回-1 * 2. 数组长度为2,返回两者中最小值 * 3. 从前往后遍历一遍 * 3.1 比最大值大,...原创 2020-02-27 15:32:41 · 1678 阅读 · 0 评论 -
Algorithm Gossip: 八枚银币
说明 现有八枚银币a b c d e f g h,已知其中一枚是假币,其重量不同于真币,但不知是较轻或较重,如何使用天平以最少的比较次数,决定出哪枚是假币,并得知假币比真币较轻或较重。解法 单就求假币的问题是不难,但问题限制使用最少的比较次数,所以我们不能以单纯的回圈比较来求解,我们可以使用决策树(decision tree),使用分析与树状图来协助求解。一个简单的状况是这样的,我们比较a+b+c...原创 2018-05-18 09:00:38 · 314 阅读 · 0 评论 -
判断回文字符串
#include <iostream>#include<cstring>using namespace std;int main(){ char a[100]; int k = 0,flag = 0; cin>>a; k = strlen(a); for(int i=0; i<k; i++,k--) ...原创 2018-07-16 10:20:48 · 444 阅读 · 0 评论 -
练习1
1. 试编写一个模板函数I n p u t,它要求用户输入一个非负数,并负责验证用户所输入的数是否真的大于或等于0,如果不是,它将告诉用户该输入非法,需要重新输入一个数。在函数非成功退出之前,应给用户三次机会。如果输入成功,函数应当把所输入的数作为引用参数返回。输入成功时,函数应返回true, 否则返回f a l s e。上机测试该函数。 2. 试编写一个模板函数,用来测试数组a中的元素是...原创 2018-08-07 09:58:02 · 378 阅读 · 0 评论 -
复数的四则运算
纯C语言版:#include<stdio.h>#include<math.h>struct cpxNum{ double a,b;};cpxNum cplus(cpxNum c1,cpxNum c2); //加cpxNum cmilus(cpxNum c1,cpxNum c2); //减cpxNum cmultiply(cp...原创 2018-10-13 23:43:46 · 908 阅读 · 0 评论 -
0/1背包问题
1. 蛮力法伪代码:输入:重量{W1,W2,----Wn},价值 {V1,V2,---Vn},背包容量C输出:装入背包的物品编号和最大价值1. 初始化最大价值maxValue=0;结果子集S=Φ;2. 对集合{1,2,---,n}的每个子集T,执行下述操作; 2.1 初始化背包的价值value=0;背包的重量weight=0; 2.2 对子集T的每一个元素; ...原创 2018-10-15 11:09:07 · 492 阅读 · 0 评论 -
TSP问题
1. 蛮力法:基本思想:找出所有可能的旅行路线,即依次考查图中所有顶点的全排列,从中选择路径长度最短的哈密顿回路(也称简单回路).时间复杂性: Ω(n!)2. 动态规划法:伪代码:输入: 图的代价矩阵arc[n][n]输出: 从顶点0出发经过所有顶点一次且一次再回到顶点0的最短路径长度1. 初始化第0列: for(i=1; i<n; i++) ...原创 2018-10-15 13:04:01 · 4602 阅读 · 2 评论 -
多段图的最短路径问题
代码:#include<bits/stdc++.h>using namespace std;int arc[20][20];const int MAX = 1000; // 假定边上的权值均不超过1000int CreateGraph(){ int i,j,k; int weight; int vnum,arcnum; cout&l...原创 2018-10-17 16:26:21 · 2358 阅读 · 1 评论 -
最长上升序列
int IncreaseOrder(int a[],int n){ int i,j,k,index; int L[10],x[10][10]; for(i=0; i<n; i++) { L[i]=1; x[i][0]=a[i]; } for(i=1; i<n; i++) { in...原创 2018-10-17 18:07:32 · 302 阅读 · 0 评论 -
公共子序列
int CommonOrder(char x[],int m,char y[],int n,char z[]){ int i,j,k; for(j=0; j<=n; j++) L[0][j]=0; for(i=0; i<=m; i++) L[i][0]=0; for(i=1; i<=m; i++) ...原创 2018-10-17 19:30:40 · 935 阅读 · 0 评论 -
三个数中求最大最小值
以最小值代码分析:1.先用a和b比较,得到a、b中较小的那个数,再和c比较,最后得到最小值int max(int a,int b,int c){ if(a<b) return a<c?a:c; else return b<c?b:c; }2.三个数的大小无非三种情况,a最小,b最小或者c最小,将三种情况直接列出。int max(int a,int b,i...原创 2019-07-16 23:28:37 · 9814 阅读 · 1 评论 -
求解m-n之间的所有素数,要求每6个数一行进行输出,并最后统计满足要求的素数的总数。
#include<stdio.h>#include<math.h>int a[100];int prime( int n ) { int i ; for ( i = 2; i < n ; i ++ ) if ( n % i == 0 ) return ( 0 ) ; return ( 1 ) ;}int main() { int m,n,count=0...原创 2018-04-14 19:47:07 · 6096 阅读 · 0 评论 -
1.桶排序
#include int main(){ int a[11],i,j,t; for(i=0; i a[i]=0; //初始化为0 for(i=1; i { scanf("%d",&t); //把每一个数读到变量t中 a[t]++; //进行计数 } for原创 2017-12-06 13:41:32 · 336 阅读 · 0 评论 -
判断一个数是否为素数
这是原文地址:http://c.biancheng.net/cpp/html/2547.html素数又称质数。所谓素数是指除了1和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被2~16的任一整数整除。思路1):因此判断一个整数m是否是素数,只需把m被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么m就是一个素数。思路2):另外判断方法还可以简化转载 2018-02-01 14:30:31 · 1654 阅读 · 0 评论 -
现有一个m * n的网格,从最左上角出发,每次只能向右或者向下移动一格,问有多少种不同的方法可以到达最右下角的格子
现有一个m * n的网格,从最左上角出发,每次只能向右或者向下移动一格,问有多少种不同的方法可以到达最右下角的格子1.动态规划http://blog.youkuaiyun.com/qq_30076791/article/details/50428285 #includeint n,m,dp[10005][10005];int main(){ int i,j;原创 2017-12-11 11:27:21 · 20816 阅读 · 2 评论 -
给定一个5*5的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果。
试题描述给定一个5*5的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果。输入格式输入共6行,前5行为矩阵的每一行元素,元素与元素之间以一个空格分开。第6行包含两个整数m、n,以一个空格分开。(1 输出格式输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。样例输入1 2 2 1 25 6 7原创 2017-12-07 14:45:50 · 24672 阅读 · 2 评论 -
递归法求斐波那契数列(C语言版)
斐波那契数列: 又称黄金分割数列,指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*),原创 2017-11-20 11:06:01 · 5340 阅读 · 0 评论 -
编写一个函数fan(int m),计算任一输入的整数的各位数字之和。
编写一个函数fan(int m),计算任一输入的整数的各位数字之和。主函数包括输入、输出和调用函数。原创 2017-11-17 09:47:45 · 27007 阅读 · 3 评论 -
选择排序
选择排序总的思路就是先扫一遍带排序的数列,找出最小的数(这个过程就是先第一个与第二个比较,找出两数最小数,再拿第三个数和前面找出的最小数比较,找出三个数的最小数,然后再拿第四个数和最小数比较,以此类推,找完整个数列,找出最小数),找出最小数之后,把最小数与第一个数交换位置。假设数列有ñ个数,那么接下来就是重复上面的找出最小的数放到第一个位置(与第一位置的数交换),只不过上一轮操作,但找的是后面的N...原创 2017-11-19 19:59:37 · 341 阅读 · 0 评论 -
1. 河内之塔
说明河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金原创 2017-11-20 19:29:32 · 331 阅读 · 0 评论