
西工大研究生复试机试题
西工大复试机试题
努力努力再努力YY
最大的理想就是自由一生
展开
-
递归与分治---全排列
问题描述:给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。我们假设对于小写字母有’a’ < ‘b’ < … < ‘y’ < ‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。输入:输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。输出:输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:已知S = s1s2…sk , T = t1t2…tk,则S < T 等价于,存在p原创 2021-02-08 10:42:02 · 203 阅读 · 0 评论 -
贪心思想(区间问题)---雷达安装问题
Radar InstallationTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 143567 Accepted: 31703DescriptionAssume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in原创 2021-02-07 20:55:15 · 668 阅读 · 1 评论 -
贪心算法(二分算法)---烘干衣服
问题描述:有n件衣服需要烘干,每件衣服含水量为ai,自然烘干每分钟含水量减1,烘干机每分钟减少k,只有一台烘干机,每次使用烘干机至少一分钟,求把所有衣服烘干所需要的最少时间。#include<stdio.h>#include<cmath>#include<algorithm>using namespace std;const int MAXN = 1e5+10;int water[MAXN];//判断在时间time内是否可以将所有的衣服烘干 bool原创 2021-02-07 19:10:18 · 555 阅读 · 1 评论 -
贪心问题(二分判定法)---牛棚距离问题
DescriptionFarmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,…,xN (0 <= xi <= 1,000,000,000).His C (2 <= C <= N) cows don’t like this barn layout and b原创 2021-02-07 18:06:20 · 1146 阅读 · 0 评论 -
贪心问题---箱子打包问题
问题描述:每一个箱子具有相同的长度,现有n个物品,一个箱子最多只能装两件物品,问至少需要几个箱子,先输入物品的个数,其次输入箱子的长度,再输入每个物品的长度。/* 每一个箱子具有相同的长度,现有n个物品,一个箱子最多只能装两件物品,问至少需要几个箱子*/#include <iostream>#include<stdio.h>#include<algorithm>using namespace std;int arr[11];bool Compare(in原创 2021-02-07 16:40:54 · 473 阅读 · 0 评论 -
贪心算法--猫粮换咖啡豆
FatMouse’ TradeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 54406 Accepted Submission(s): 18244Problem DescriptionFatMouse prepared M pounds of cat food, ready to trade with the cats guarding the原创 2021-02-07 15:46:50 · 194 阅读 · 0 评论 -
全排列系统函数next_permutation(排列的开始位置,排列的结束位置,排列方式(默认从小到大,可以自己修改))
#include <iostream>#include<algorithm>using namespace std;int main(){ string str; cin>>str; sort(str.begin(),str.end()); do{ cout<<str<<endl; }while(next_permutation(str.begin(),str.end()));原创 2021-02-08 11:12:51 · 149 阅读 · 0 评论 -
数学问题--矩阵运算之加、乘、转置、幂运算
#include <iostream>using namespace std;//定义矩阵结构struct Matrix{int row;int col;int matrix[100][100];Matrix(int r,int c){row=r;col=c;}};//矩阵相加Matrix add(Matrix x,Matrix y){Matrix answer(x.row,x.col);for(int i=0;i<answer.row;i++){原创 2021-02-07 12:42:56 · 305 阅读 · 0 评论 -
数学问题--快速幂
问题:求x的n次方,输入x和n.#include <iostream>using namespace std;int quickpow(int x,int n){//求x的n次方模板函数int answer=1;while(n!=0){ if(n%2==1){ answer*=x; } n/=2; x*=x;}return answer;}int main(){int zhengshu;in原创 2021-02-07 11:20:59 · 158 阅读 · 0 评论 -
数学问题---求质因子的个数
问题:每一个数都可以次唯一的分解为几个质因子之积,例如30=235,计算质因子的个数代码:#include <iostream>#include<cstdio>#include<vector>using namespace std;const int MAXN=1e3;bool isprime[MAXN];vector<int>v;//存放质数的容器void initial(){//初始化isprime数组isprime[0]=fa原创 2021-02-07 10:41:29 · 1019 阅读 · 0 评论 -
数学问题---求第k个质数(质数筛选法)
问题:输入k,输出第k个质数代码:#include <iostream>#include<cstdio>#include<vector>using namespace std;const int MAXN=1e3;bool isprime[MAXN];vector<int>v;void initial(){isprime[0]=false;isprime[1]=false;for(int i=2;i<MAXN;i++){原创 2021-02-07 09:49:10 · 1102 阅读 · 0 评论 -
数学问题---求最大公约数和最小公倍数
问题:多组样例输入,输入两个数,输出其最大公约数以及最小公倍数最大公约数代码:#include <iostream>using namespace std;int GCD(int a,int b){if(b==0){ return a;}else{ return GCD(b,a%b);}}int main(){ int a,b; while(cin>>a>>b){ cout<<GCD(a原创 2021-02-07 09:08:45 · 215 阅读 · 0 评论 -
数学问题--x进制转变为10进制
代码://x进制转换为10进制#include<iostream>#include<string>using namespace std;int chartonum(char c){if(c>='0'&&c<='9'){ return c-'0';}else{ return c-'A'+10;} }void convert(string str,int x){int sum=0;for(int i=0;i原创 2021-02-06 22:19:21 · 730 阅读 · 0 评论 -
数学问题---进制转换
题目描述大家都知道,数据在计算机里中存储是以二进制的形式存储的。 有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的。 你能帮帮小明吗?并且,小明不想要二进制串中前面的没有意义的0串,即要去掉前导0。输入描述:多行,每一行表示要求的数字输出描述:输出共T行。每行输出求得的二进制串。示例1输入23535262456275989835输出101111000010111101001000000110110111原创 2021-02-06 21:49:13 · 299 阅读 · 0 评论 -
栈的应用---表达式求值
题目描述:读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。输入:测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。输出:对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。样例输入:1 + 24 + 2 * 5 - 7 / 110样例输出:3.0013.36*/代码:#include <iostream>#i原创 2021-02-06 21:14:01 · 233 阅读 · 0 评论 -
栈的应用--括号匹配
问题描述:题目描述:在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$“标注,不能匹配的右括号用”?"标注.输入:输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100。注意:cin.getline(str,100)最多只能输入99个字符!输出:原创 2021-02-06 19:49:22 · 619 阅读 · 0 评论 -
二分查找--系统自带函数
#include <iostream>#include<stdio.h>#include<algorithm>using namespace std;int arr[100];int main(){int n;scanf("%d",&n);//输入序列的个数for(int i=0;i<n;i++){ scanf("%d",&arr[i]);//输入序列的值}int target;//输入要查找的数scanf("%原创 2021-02-05 21:56:11 · 166 阅读 · 0 评论 -
二分查找法--用自己写的函数
#include <iostream>#include<stdio.h>#include<algorithm>using namespace std;int arr[100];bool Binarysort(int n,int target){int left=0;int right=n-1;while(left<=right){ int mid=left+(right-left)/2; if(arr[mid]<原创 2021-02-05 21:35:30 · 111 阅读 · 0 评论 -
快速排序--可以实现求第k大数
/* 用快速排序实现求第k大数*/#include <iostream>#include<stdio.h>using namespace std;int arr[100];int Partition(int left,int right){int random=rand()%(right-left)+left;swap(arr[left],arr[random]);while(left<right){ while(left<right&am原创 2021-02-05 20:48:32 · 330 阅读 · 0 评论 -
归并排序算法--用来求逆序对
直接上代码:#include <iostream>#include<stdio.h>using namespace std;int arr[100];int temp[100];//临时存储排好序的数字int sum;void Combine(int left,int middle,int right){int i=left;int j=middle+1;int k=left;while(i<=middle&&j<=right){原创 2021-02-05 19:35:29 · 93 阅读 · 0 评论 -
基于计数的线性排序算法
问题描述:给你一组数,请按从大到小输出前m个数,n<10的6次方,数的区间为[-500000,500000]代码:#include <iostream>#include<stdio.h>#include<stdio.h>const int MAXN=1e6+10;const int RANGE=5e5;int arr[MAXN]={0};int number[MAXN]={0};using namespace std;int main()原创 2021-02-05 19:36:16 · 80 阅读 · 0 评论 -
sort函数用法(三)(c++)
问题描述:描述输入10个整数,彼此以空格分隔重新排序以后输出(也按空格分隔),要求:1.先输出其中的奇数,并按从大到小排列;2.然后输出其中的偶数,并按从小到大排列。输入任意排序的10个整数(0~100),彼此以空格分隔输出按照要求排序后输出,由空格分隔代码:#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;bool Compare(int原创 2021-02-04 20:48:19 · 202 阅读 · 0 评论 -
sort函数用法(二)(c++)
问题描述:输入描述:输入第一行包括一个整数N(1<=N<=100),代表学生的个数。接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。输出描述:按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。如果学生的成绩相同,则按照学号的大小进行从小到大排序。输入例子:31 902 873 92输出例子:2 871 903 92代码:#include <iostream>#include<stdio.h>#include&原创 2021-02-04 20:20:11 · 693 阅读 · 0 评论 -
sort排序函数的用法(一)(c++)
题目描述:/*题目描述: 对输入的n个数进行排序并输出。输入: 输入的第一行包括一个整数n(1<=n<=100)。 接下来的一行包括n个整数。输出: 可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。 每组测试数据的结果占一行。样例输入:41 4 3 2样例输出:1 2 3 4*/代码:#include <iostream>#include<cstdio>#inc原创 2021-02-04 19:56:34 · 479 阅读 · 1 评论 -
广度优先搜索(BFS)---农夫与牛
问题描述:农夫知道一头牛的位置,想要抓住它。农夫和牛都于数轴上 ,农夫起始位于点 N(0<=N<=100000) ,牛位于点 K(0<=K<=100000) 。农夫有两种移动方式: 1、从 X移动到 X-1或X+1 ,每次移动花费一分钟 2、从 X移动到 2*X ,每次移动花费一分钟 假设牛没有意识到农夫的行动,站在原地不。最少要花多少时间才能抓住牛?Input一行: 以空格分隔的两个字母: N 和 KOutput一行: 农夫抓住牛需要的最少时间,单位分钟Sample I原创 2021-02-08 15:34:11 · 812 阅读 · 0 评论 -
输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。
问题描述:输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。代码:#include <iostream>using namespace std;struct treenode{int data;treenode* left;treenode* right;treenode(int num){data=num;left=nullptr;right=nullptr;}};//前序遍历void preorder(treenode* root){if(ro原创 2021-02-08 20:13:18 · 2820 阅读 · 0 评论 -
二叉树遍历--已知先序和中序,求后序遍历
代码如下:#include <iostream>#include<cstdio>#include<string.h>#include<string>using namespace std;//先定义树的结构体struct treenode{char data;treenode* left;treenode* right;treenode(char c){ data=c; left=nullptr; right=原创 2021-02-08 19:36:57 · 333 阅读 · 1 评论 -
优先级队列的应用--求哈夫曼树的带权路径长度
哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出哈夫曼树的带权路径长度(WPL)。输入格式:第一行输入一个数n,第二行输入n个叶结点(叶结点权值不超过1000,2<=n<=1000)。输出格式:在一行中输出WPL值。输入样例:51 2 2 5 9输出样例:37代码:#include <iostream>#include<queue>using na原创 2021-02-08 21:52:00 · 273 阅读 · 0 评论 -
优先级队列(二叉堆)---系统函数priority_queue()的应用
题目描述: 一个复数(x+iy)集合,两种操作作用在该集合上: 1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE; 2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE; 最开始要读入一个int n,表示接下来的n行每一行都是一条命令。输入:输入有多组数据。每组输入一个n(1<=n<原创 2021-02-08 21:22:34 · 138 阅读 · 0 评论 -
图的应用--拓扑排序---求比赛名次
有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。输入:输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。输出:原创 2021-02-09 21:04:59 · 204 阅读 · 0 评论 -
图的应用---求最短路径--畅通工程续
Problem Description某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。Input本题目包含多组数据,请处理到文件结束。 每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0原创 2021-02-09 20:22:54 · 149 阅读 · 0 评论 -
图论---并查集的应用--用克鲁斯卡尔求最小生成树
Problem Description某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编原创 2021-02-09 10:47:40 · 133 阅读 · 0 评论 -
图的应用--并查集->用来求一个图是否为连通图
题目描述: 给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。输入: 每组数据的第一行是两个整数 n 和 m(0<=n<=1000)。n 表示图的顶点数目,m 表示图中边的数目。如果 n 为 0 表示输入结束。随后有 m 行数据,每行有两个值 x 和 y(0<x, y <=n),表示顶点 x 和 y 相连,顶点的编号从 1 开始计算。输入不保证这些边是否重复。输出: 对于每组输入数据,如果所有顶点都是连通的,输出"YES",否则输出"NO原创 2021-02-09 09:54:41 · 179 阅读 · 0 评论 -
动态规划--01背包问题---点菜问题
题目描述北大网络实验室经常有活动需要叫外买,但是每次叫外买的报销经费的总额最大为C元,有N种菜可以点,经过长时间的点菜,网络实验室对于每种菜i都有一个量化的评价分数(表示这个菜可口程度),为Vi,每种菜的价格为Pi, 问如何选择各种菜,使得在报销额度范围内能使点到的菜的总评价分数最大。 注意:由于需要营养多样化,每种菜只能点一次。输入描述:输入的第一行有两个整数C(1 <= C <= 1000)和N(1 <= N <= 100),C代表总共能够报销的额度,N>代表原创 2021-02-10 11:29:43 · 447 阅读 · 0 评论 -
动态规划--求两个字符串的最长公共子序列长度
动态规划–求两个字符串的最长公共子序列长度代码:#include <iostream>#include<string.h>#include<string>using namespace std;const int MAXN=100;const int INF=INT_MAX;int memo[MAXN][MAXN];char s1[MAXN];char s2[MAXN];int max_xulie(int m,int n){//求s1中m号原创 2021-02-10 10:37:50 · 1526 阅读 · 0 评论 -
动态规划--最长递增序列
在一个给定的数值序列中,找到一个子序列,使得这个子序列元素的数值依次递增,并且这个子序列的长度尽可能地大。最长递增子序列中的元素在原序列中不一定是连续的。输入:42 3 1 5输出:3代码:#include <iostream>#include<string.h>using namespace std;const int MAXN=100;int arr[MAXN];int memo[MAXN];//用来做备忘录,记录算过的值的最长递增子序列,降低时间复杂度原创 2021-02-10 07:37:28 · 166 阅读 · 0 评论 -
动态规划--最大序列和
题目描述给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。 对于S的所有非空连续子序列T,求最大的序列和。 变量条件:N为正整数,N≤1000000,结果序列和在范围(-263,263-1)以内。输入描述:第一行为一个正整数N,第二行为N个整数,表示序列中的数。输出描述:输入可能包括多组数据,对于每一组输入数据,仅输出一个数,表示最大序列和。示例1输入51 5 -3 2 461 -2 3 4 -10 64-3 -1 -2 -5输出9原创 2021-02-09 23:02:58 · 322 阅读 · 0 评论 -
字符串替换
输入三个字符串a,b,c。将a中第一次出现的字符串c替换成为字符串c代码:#include<iostream>#include<cstdio>#include<string>using namespace std;int main(){string a;string b;string c;getline(cin,a);getline(cin,b);getline(cin,c);int pos=a.find(b);a.replace(pos,b原创 2021-03-07 20:00:32 · 380 阅读 · 0 评论 -
C语言如何实现字符串翻转函数strrev(), reverse()
1.使用string.h中的strrev函数strrev(数组名);即可实现字符串的反转,2.使用algorithm中的reverse函数#include<stdio.h>#include<string.h>int main(){ char s[]="hello"; strrev(s); puts(s); return 0; }2.使用algorithm中的reverse函数#include <algorithm>u转载 2021-02-08 11:01:24 · 2988 阅读 · 0 评论 -
字符串应用---kmp算法
代码:#include <iostream>#include<string>using namespace std;const int MAXM=100;int nextTable[MAXM];//得到naxtTable表的值void GetNextTable(string pattern){int m=pattern.size();int j=0;nextTable[j]=-1;int t=nextTable[j];while(j<m){原创 2021-02-06 14:56:58 · 179 阅读 · 1 评论