程序设计(三)
mshobtp
这个作者很懒,什么都没留下…
展开
-
Java反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000leetCode 剑指Offer24.反转链表public class Main { static class ListNode{ int val; ListNode ne原创 2021-06-10 18:39:05 · 311 阅读 · 0 评论 -
回文数判断
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。提示:-2^31<= x <= 2^31 - 1LeetCode 9.回文数import java.util.*;public class Main{ public static boolean isPalindrome(int x){ if(x<0||(x%10=原创 2021-05-31 13:21:22 · 129 阅读 · 0 评论 -
对称二叉树
给定一个二叉树,检查它是否是镜像对称的。LeetCode 101.对称二叉树import java.util.*;class TreeNode{ char data; TreeNode left; TreeNode right; public TreeNode(char data){ this.data=data; this.right=null; this.left=null; }}class BiTre原创 2021-05-25 13:13:59 · 117 阅读 · 0 评论 -
无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。0 <= s.length <= 5 * 104s 由英文字母、数字、符号和空格组成LeetCode 3.无重复字符的最长子串import java.util.*;public class Main{ public static int lengthOfLongestSubstring(String s){ Set<Character> occ= new HashSet<Chara原创 2021-05-24 14:54:05 · 112 阅读 · 0 评论 -
合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列LeetCode 21.合并两个有序链表import java.util.*;class ListNode { public int val; ListNode next; public ListNode(){} public Lis原创 2021-05-21 09:57:45 · 59 阅读 · 0 评论 -
最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。package Pack;import java.lang.reflect.Array;import java.util.*;public class Main{ public static String longestPalindrome(String str){ int n=str.length(); if(n==0||n==1) return str; int [][原创 2021-05-20 22:30:52 · 71 阅读 · 0 评论 -
活动安排问题
C++#include<iostream>using namespace std;int s[100],f[100],B[100]={0};int ActiveManage(int s[],int f[],int B[],int n){ int i,j,count; B[0]=1; j=0;count=1; for(i=0;i<n;i++) { if(s[i]>=f[j]) {原创 2021-01-06 20:01:01 · 92 阅读 · 0 评论 -
八皇后问题
八皇后问题(eight queens problem)是19世纪著名的数学家高斯与1850年提出的。问题是:在88棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后不能处于同一行,同一列或同一斜线上。可以把八皇后问题扩展到n皇后问题,即在nn棋盘上摆放n个皇后,使任意两个皇后都不能处于同一行,同一列或同一斜线上。C++实现#include<iostream>using namespace std;void Queen(int n);int Place(int k);int x[1原创 2021-01-06 18:52:58 · 1150 阅读 · 0 评论 -
贪心法解决部分背包问题
给定n个物品和一个容量为C的背包,物品i的重量是Wi,其价值是Vi,背包问题是如何选择装入背包的物品的总价值最大。C++#include<iostream>using namespace std;int KnapSack(int w[],int v[],int C,int n){ int i; int maxValue=0; double x[10]={0}; for(i=0;w[i]<C;i++) { x[i]=1;原创 2021-01-05 19:01:50 · 235 阅读 · 0 评论 -
NOI 2.6移动路线
2718:移动路线总时间限制: 1000ms 内存限制: 65536kB描述桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁的右脚弄伤了,于是蚂蚁只能向上或向右移动。小明把这只蚂蚁放在左下角的方格中,蚂蚁从左下角的方格中移动到右上角的方格中,每步移动一个方格。蚂蚁始终在方格矩阵内移动,请计算出不同的移动路线的数目。对于1行1列的方原创 2020-11-17 23:05:50 · 321 阅读 · 0 评论 -
二叉查找树
二叉查找树是具有下列性质的二叉树:(1)若它的左子树不空,则左子树上所有节点的值均小于根节点的值;(2)若它的右子树不空,则右子树上所有节点的值均大于根节点的值;(3)它的左右子树也是二叉排序树。#include<iostream>#include<stdio.h>using namespace std;struct BiNode{ int data; //节点的值,假设查找元素的集合为整型 BiNode *lc原创 2020-11-08 12:30:40 · 80 阅读 · 0 评论 -
C与C++ struct的理解
1.在C++中的struct等同于class,只是class默认成员权限是private,而struct默认成员权限public;2.在C++中支持成员函数的定义,比如构造函数,析构函数,友元等,而C语言struct中不可以有函数。3.C++ struct里面的成员初始化的形式和类是相同的,不可以直接初始化,就是不可以定义成员的时候同时初始化。C语言struct中间的某个类型(例如int)也不可以直接初始化。struct He{int a=0;};//在C++和C编译是不能通过的4.如果不用t原创 2020-11-08 11:57:55 · 323 阅读 · 0 评论 -
C语言typedef结构体的理解
在C语言里,struct用于定义一个数据类型------结构体,typedef用于给数据类型取别名。typedef struct Student{ int Age; int Id[10];}Stu;表示给结构体变量struct Student取了一个别名Stu。这样下次定义一个结构体变量就可以写成Stu stu1。如果不用typedef。struct Student{ int Age; int Id[10];}Stu;此时说明已经定义了一个结构体变量Stu,如原创 2020-11-08 11:24:53 · 3283 阅读 · 3 评论 -
C++/Java插入排序
C++实现#include<iostream>using namespace std;void InsertSort(int r[],int n){ int j; for(int i=2;i<=n;i++) { r[0]=r[i]; for(j=i-1;r[0]<r[j];j--) r[j+1]=r[j]; r[j+1]=r[0]; }}int main(){原创 2020-11-07 08:36:35 · 72 阅读 · 0 评论 -
C++/Java最长递增子序列
在数字序列A={a1\displaystyle a_1a1,a2\displaystyle a_2a2,…,an\displaystyle a_nan}中按递增下标(i1,i2,...,ik)((i≤i1<i2<...<ik≤n))(\displaystyle i_1,i_2,...,i_k)((i\leq i_1< i_2<...<i_k \leq n))(i1,i2,...,ik)((i≤i1<i2<...<ik≤n))顺序选出一个原创 2020-11-07 08:23:31 · 145 阅读 · 0 评论 -
NOI1808公共子序列
1808:公共子序列总时间限制: 1000ms 内存限制: 65536kB描述我们称序列Z = < z1, z2, …, zk >是序列X = < x1, x2, …, xm >的子序列当且仅当存在 严格上升 的序列< i1, i2, …, ik >,使得对j = 1, 2, … ,k, 有xij = zj。比如Z = < a, b, f, c > 是X = < a, b, c, f, b, c >的子序列。现在给出两个序列X和Y,你的任务原创 2020-10-29 09:14:39 · 114 阅读 · 0 评论 -
C++最长公共子序列问题
最长公共子序列问题:#include<iostream>#include<cstring>using namespace std;int L[1000][1000];int S[1000][1000];char z[1000];int CommonOrder(char x[],int m,char y[],int n){ int i,j,k; for(j=0;j<=n;j++) L[0][j]=0; for(i=0;i&l原创 2020-10-29 09:11:07 · 170 阅读 · 0 评论 -
C++\Java动态规划------0-1背包问题
给定n种物品和一个背包,物品(i≤\displaystyle\leq≤j≤\displaystyle\leq≤n)的重量是wi,其价值是vi,背包容量是C,对每种物品只有两种选择:装入背包或不装入背包。如何选择装入背包的物品,使得装入背包中物品的总价值最大?#include<iostream>using namespace std;#define N 1000int x[N];int V[N][N];int KnapSack(int w[],int v[],int n,int C原创 2020-10-28 21:17:44 · 78 阅读 · 0 评论 -
C++分治法--最近对问题
最近对问题:最近对问题要求在一个包含n个点的集合中找出距离最近的两个点。严格地讲,距离最近的点可能多于一个,简单起见,只找出其中的一对即可。最近对问题的分治策略如下:(1)划分:将集合S分成两个子集S1和S2,根据平衡子问题原则,每个子集中大约有n/2个点,设集合S的最近点对是pi\displaystyle p_ipi和pj\displaystyle p_jpj(1≤\displaystyle\leq≤i,j≤\displaystyle\leq≤n),则会出现以下三种情况:1.pi∈S1\dis原创 2020-10-24 17:19:22 · 3564 阅读 · 1 评论 -
NOI2.2-11求最大公约数问题(C++)
7592:求最大公约数问题总时间限制: 1000ms 内存限制: 65536kB描述给定两个正整数,求它们的最大公约数。输入输入一行,包含两个正整数(<1,000,000,000)。输出输出一个正整数,即这两个正整数的最大公约数。样例输入6 9样例输出3提示求最大公约数可以使用辗转相除法:假设a > b > 0,那么a和b的最大公约数等于b和a%b的最大公约数,然后把b和a%b作为新一轮的输入。由于这个过程会一直递减,直到a%b等于0的时候,b的值就是所要求的原创 2020-10-21 23:32:16 · 597 阅读 · 0 评论 -
CSP2014-03-1相反数
CCF201403-1 相反数(100分)试题编号: 201403-1试题名称: 相反数时间限制: 1.0s内存限制: 256.0MB问题描述: 有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。输入格式 第一行包含一个正整数 N。(1 ≤ N ≤ 500)。 第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。输出格式 只输出一个整数,即这 N 个数中包含多少对相反数。样例输入5原创 2020-10-21 20:29:05 · 276 阅读 · 0 评论 -
CSP2013-12-2 ISBN号码
试题编号: 201312-2试题名称: ISBN号码时间限制: 1.0s内存限制: 256.0MB问题描述: 问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版原创 2020-10-20 14:11:30 · 83 阅读 · 0 评论 -
CCF2013-12-1出现次数最多的数
试题编号: 201312-1试题名称: 出现次数最多的数时间限制: 1.0s内存限制: 256.0MB问题描述: 问题描述 给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。 输入的第二行有n个整数s 1, s 2, …, s n (1 ≤ s i ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。输出格式 输出这n个次数中出现次数最多的数。如果这样原创 2020-10-19 21:18:21 · 173 阅读 · 0 评论 -
判断一个大整数能否被11整除
设计算法,判断一个大整数能否被11整除。可以通过以下方法:将该数的十进制表示从右端开始,每两位一组构成一个整数,然后将这些数相加,判断其和能否被11整除。例如,将562843748分割成5,62,84,37和48,然后判断(5+62+84+37+48)能否被11整除。#include<iostream>#include<cstring>using namespace std;void JudgeDivision(int r[],int n){ long int s原创 2020-10-19 20:59:51 · 4549 阅读 · 0 评论 -
求数组中最接近的两个元素的差
设计算法求数组中相差最小的两个元素(称为最接近数)的差。#include<iostream>using namespace std;int Partition(int r[],int first,int end){ int i=first,j=end; while(i<j) { while(i<j&&r[i]<=r[j]) j--; if(i<j) {原创 2020-10-18 10:15:46 · 1234 阅读 · 0 评论 -
真分式化简
分式化简。设计算法,将一个给定的真分数化简为最简分数形式。例如,将6/8化简为3/4。#include<iostream>using namespace std;int main(){ int m,n; int a,b; cout<<"输入分数的分子与分母:"; cin>>n>>m; a=m; b=n; int r=m%n; while(r!=0) { a=n;原创 2020-10-13 11:09:53 · 2299 阅读 · 0 评论 -
递归求解下列递推关系式
#include<iostream>using namespace std;int T(int n){ if(n==1) return 4; else return 3*T(n-1);}int main(){ int n; cin>>n; cout<<T(n); return 0;}#include<iostream>using namespace std.原创 2020-10-10 11:44:03 · 3629 阅读 · 2 评论 -
NOI2.4 一元三次方程求解
7891:一元三次方程求解查看提交统计提问总时间限制: 1000ms 内存限制: 65536kB描述有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。输入一行,包含四个实数a,b,c,d,相邻两个数之间用单个空格隔开。输出一行,包含三个实数,为原创 2020-10-10 11:20:53 · 281 阅读 · 3 评论 -
Fibonacci序列
Fibonacci序列:把一对兔子(雌,雄各一只)放到围栏中,每个月这对兔子都生出一对新兔子,其中雌,雄各一只,从第二个月开始。每对新兔子每个月生出一对新兔子,其中雌,雄各一只,从第二个月开始。每对新兔子每个月也生出一对新兔子,也是雌,雄各一只,一年后围栏中有多少对兔子?#include<iostream>using namespace std;int Fib(int n){ if(n==1||n==2) return 1; else return Fib(n-1)+F原创 2020-10-09 22:31:35 · 580 阅读 · 0 评论 -
最大字段和问题
最大子段和问题:给定由n个整数(可能有负整数)组成的序列(a1,a2,···,an),最大子段和要求该序列形如(∑k=ijak)\displaystyle ( \sum_{k=i}^j a_k )(k=i∑jak)的最大值(1≤\displaystyle\leq≤i≤\displaystyle\leq≤j≤\displaystyle\leq≤n)。例如,序列(-20,11,-4,13,-5,-2)的最大子段和为(∑k=24ak)\displaystyle ( \sum_{k=2}^4 a_k )(k=原创 2020-10-08 19:53:44 · 920 阅读 · 0 评论 -
删除数组重复元素
设计算法,在数组r[n]中删除所有元素值为x的元素,要求时间复杂性为O(n);空间复杂性为O(1)。#include<iostream>using namespace std;int Deletex(int r[],int n,int x){ int j=0,k=0; for(int i=0;i<n;i++) { if(r[i]!=x) { r[j]=r[i]; j++;原创 2020-10-07 16:15:16 · 852 阅读 · 0 评论 -
凸包问题
凸包问题:定义:对于平面上一个点的有限集合,如果以集合中任意两点P和Q为端点的线段上的点都属于该集合,则称该集合是凸集合。一个点集S的凸包是包含S的最小凸集合,其中,最小是指S的凸包一定是所有包含S的凸集合的子集。对于平面上n个点的集合S,它的凸包就是包含所有这些点(或者在内部,或者在边界上)的最小凸多边形,最小凸多边形上的点称为凸包的极点。#include<iostream>using namespace std;void ConvexHull(int x[],int y[],i原创 2020-10-07 15:45:53 · 940 阅读 · 1 评论 -
最近对问题
最近对问题:最近对问题要求在一个包含n个点的集合中找出距离最近的两个点。严格地讲,距离最近的点可能多于一个,简单起见,只找出其中的一对即可。#include<iostream>using namespace std;int ClosestPoints(int x[],int y[],int n){ int index1,index2; int d,minDist=1000; for(int i=0;i<n-1;i++) for(int j=原创 2020-10-07 15:16:08 · 682 阅读 · 0 评论 -
模式匹配
假设在文本"ababcabccabcacbab"中查找模式"abcac",写出采用BF算法的串匹配过程。#include<iostream>using namespace std;int BF(char S[], char T[]){ int index=0; int i=0,j=0; while((S[i]!='\0')&&(T[j]!='\0')) { if(S[i]==T[j]) {原创 2020-10-06 10:15:08 · 714 阅读 · 1 评论 -
快速排序
快速排序:设函数Partition实现对序列r[first]~r[end]进行划分,快速排序对各个子序列的排序是就地进行,不需要合并子问题的解。#include<iostream>using namespace std;int Partition(int r[],int first,int end) //划分{ int i=first,j=end; //初始化待划分区间 while(i<j) {原创 2020-10-06 09:29:39 · 116 阅读 · 0 评论 -
归并排序
归并排序MergeSort:设将两个相邻的有序子序列r[s]~r[m]和r[m+1] ~r[t]合并为一个有序序列r1[s] ~r1[t],函数Merge实现合并操作。归并排序算法用C++语言描述如下:#include<iostream>using namespace std;void Merge(int r[],int r1[],int s,int m,int t){ int i=s,j=m+1,k=s; while(i<=m&&j<=t原创 2020-10-04 18:07:59 · 157 阅读 · 0 评论 -
百元买百鸡
问题:已知公鸡5元一只,母鸡3元一只,小鸡1元三只,用100元钱买100只鸡,问公鸡,母鸡,小鸡各多少只?#include<iostream>using namespace std;void Chicken(){ int x,y,z; int count=0; for(x=0;x<=20;x++) { for(y=0;y<=33;y++) { z=100-x-y;原创 2020-10-01 09:41:18 · 106 阅读 · 0 评论 -
顺序查找
顺序查找:在集合中一次查找值为k的元素#include<iostream>using namespace std;int SeqSearch(int r[],int n,int k){ int i=n; r[0]=k; while(r[i]!=k) i--; return i;}int main(){ int r[100]; int n,k; cin>>n; for(int i=1;i&原创 2020-10-01 10:04:53 · 79 阅读 · 0 评论 -
模式匹配
串匹配问题·:给定两个字符串S和T,在主串S中查找自串T的过程称为串匹配,也称为模式匹配,T称为模式。#include<iostream>#include<stdio.h>using namespace std;int BF(char S[],char T[]){ int index=0; int i=0,j=0; while((S[i]!='\0')&&(T[j]!='\0')) { if(S[i]=T[原创 2020-10-01 10:28:13 · 352 阅读 · 0 评论 -
选择排序
#include<iostream>#include<stdio.h>using namespace std;void SelectSort(int r[],int n){ int i,j,index,temp; for(i=0;i<n-1;i++) //对n个记录进行n-1趟选择排序 { index=i; for(j=i+1;j<n;j++) //在无序区查找最小记录原创 2020-10-01 10:57:54 · 80 阅读 · 0 评论