![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
计算机考研复试
考研复试
懒狗的救赎
HUMBLE.
展开
-
马戏团【动态规划】
#include <iostream>#include <cstring>using namespace std;int dp[21][21];int fun(int n,int k){ //k表示余额份数 if(dp[n][k]>=0) return dp[n][k]; int ans; if(k<0||k>n) //当余额小于0,或者余额超过n份 ans = 0; else if(n==原创 2021-03-23 19:23:22 · 181 阅读 · 0 评论 -
KY180 堆栈的使用
利用stack:#include <iostream>#include <cstring>#include <algorithm>#include <stack>using namespace std;int main(){ int n; stack<int> s; while(cin>>n){ if(n==0) break; char c;原创 2021-03-22 21:36:31 · 117 阅读 · 0 评论 -
KY179 搬水果
思路:哈夫曼编码代码:#include <iostream>#include <cstring>#include <algorithm>#include <map>using namespace std;int main(){ int n,a[10005]; map<int,bool> MAP; while(cin>>n){ if(n==0) break;原创 2021-03-22 21:19:06 · 107 阅读 · 0 评论 -
KY176 排列与二进制
思路:归根结底就是在问n*(n-1)……(n-m+1)能整除几次2。也就是上述乘积里面能分解出几个2。那么,可以把每个乘数分别判其断能分解出的2的数量,然后加在一起就是乘积能分解出的2的数量。代码:#include <iostream>#include <cstring>#include <algorithm>#include <map>using namespace std;int main(){ int n,m; whi原创 2021-03-22 20:44:44 · 117 阅读 · 0 评论 -
KY171 计算两个矩阵的乘积
#include <iostream>#include <cstring>#include <algorithm>#include <map>using namespace std;int main(){ int a[2][3],b[3][2]; for(int i=0;i<2;i++){ for(int j=0;j<3;j++){ cin>>a[i][j];原创 2021-03-22 15:11:50 · 72 阅读 · 0 评论 -
KY167 数字阶梯求和
#include <iostream>#include <cstring>#include <algorithm>#include <map>using namespace std;int main(){ int n; string a; while(cin>>a>>n){ string s="",t=""; for(int i=0;i<n;i++){原创 2021-03-22 14:33:38 · 92 阅读 · 0 评论 -
KY151 ZOJ问题
#include <iostream>#include <cstring>#include <algorithm>#include <map>using namespace std;int main(){ string a; while(getline(cin,a)){ int fro=0,mid=0,rear=0; int i=0; for(;i<a.length();i++)原创 2021-03-21 15:16:40 · 91 阅读 · 0 评论 -
KY150 最小长方形
#include <iostream>#include <cstring>#include <algorithm>#include <map>using namespace std;int main(){ int a,b; while(scanf("%d %d",&a,&b)){ if(a==0&&b==0){ break; }原创 2021-03-21 14:59:31 · 71 阅读 · 0 评论 -
KY146 魔咒词典
#include <iostream>#include <cstring>#include <algorithm>#include <map>using namespace std;int main(){ map<string,string> MAP1; map<string,string> MAP2; string a,b; while(getline(cin,a)){ if原创 2021-03-21 13:51:02 · 70 阅读 · 0 评论 -
KY137 继续xxx定律
概要:对于一个数n,如果是偶数,就把n砍掉一半;如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止。代码:#include <iostream>#include <cstring>#include <algorithm>#include <map>using namespace std;int main(){ int n,t; map <int,int> MAP; while(cin>&原创 2021-03-21 11:17:26 · 169 阅读 · 0 评论 -
KY130 A + B
#include <iostream>#include <cstring>#include <algorithm>#include <map>using namespace std;int main(){ string a; map<string,int> MAP; MAP["zero"]=0; MAP["one"]=1; MAP["two"]=2; MAP["three"]=3;原创 2021-03-20 19:28:52 · 94 阅读 · 0 评论 -
KY125 火星A+B
分析:10进制数38,在火星上记为“1,1,1,0”, 表示有1个7,一个5,1个3,0个2的意思。代码:#include <iostream>#include <cstring>#include <cmath>using namespace std;bool prime(int n){ for(int i=2;i*i<=n;i++) if(n%i==0) return 0; return 1;原创 2021-03-20 18:26:03 · 141 阅读 · 0 评论 -
KY117 奥运排序问题
#include <iostream>#include <cstring>using namespace std;int main(){ int n,m,t; while(cin>>n>>m){ int coun[10][3]; //分别记录各个国家的金牌、奖牌、人口数 for(int i=0;i<n;i++){ cin>>coun[i][0]>>co原创 2021-03-20 16:19:51 · 158 阅读 · 0 评论 -
最长公共子序列【动态规划】
#include <iostream>#include <cstring>using namespace std;string a,b;int dp[100][100];int fun(int n,int m){ //n,m分别表示两个字符串当前最长公共子序列的位置 if(dp[n][m]>=0) return dp[n][m]; int ans; if(n==0||m==0){ //如果到达起始位置 if(原创 2021-03-20 14:59:52 · 56 阅读 · 0 评论 -
KY108 Day of Week
分析:1年1月1日为星期一代码:#include <iostream>#include <cstring>#include <cmath>#include <algorithm>#include <map>using namespace std;bool judge(int n){ if(n%100!=0&&n%4==0||n%400==0) return 1; return 0;原创 2021-03-19 18:29:20 · 56 阅读 · 0 评论 -
KY86 八皇后【回溯 DFS】
#include <iostream>#include <cstring>#include <cmath>using namespace std;int ans[8]; //储存正确结果int tag[8]; //标记当前位是否使用int k,num; //k为当前是第几个八皇后序列,num是查找第几个int check(int n){ //检查之前已经加入的皇后是否与刚加入的皇后冲突 for(int i=0;i<n;i++){ //原创 2021-03-18 17:35:18 · 195 阅读 · 0 评论 -
KY85 二叉树
#include <iostream>#include <cstring>#include <algorithm>using namespace std;int fun(int x,int y){ if(x==y) return 1; else if(x>y) return 0; else{ return fun(2*x,y)+fun(2*x+1,y)+1; }}int m原创 2021-03-18 15:55:20 · 169 阅读 · 0 评论 -
KY 80 十六进制转换为十进制
万能法:参考:https://blog.csdn.net/Jay98/article/details/114792107#include <iostream>#include <cstring>#include <algorithm>using namespace std;int main(){ string a; while(cin>>a){ a=a.substr(2); int l=a.leng原创 2021-03-18 14:50:47 · 194 阅读 · 0 评论 -
KY79 浮点数加法
思路:分小数部分和整数部分处理,长度不同的部分增加‘0’处理。注意字符串这两种运算:a+='0' //0加到a的后面a='0'+a //0加到a的前面代码:#include <iostream>#include <cstring>#include <algorithm>using namespace std;int main(){ string a,b; while(getline(cin,a)&&getline原创 2021-03-18 13:55:51 · 148 阅读 · 0 评论 -
KY74 字符串排序【稳定排序】
分析:需要使用稳定排序,即stable_sort()函数。代码:#include <iostream>#include <algorithm>#include <cstring>#include <map>using namespace std;typedef struct{ char r,c;}letter;int cmp(letter a,letter b){ if(a.c<b.c) retur原创 2021-03-17 17:58:45 · 102 阅读 · 0 评论 -
KY75 采药
#include <iostream>#include <algorithm>#include <cstring>#include <map>using namespace std;int use[1005];int value[1005];int dp[105][1005];int fun(int n,int t){ if(dp[n][t]>0) return dp[n][t]; int ans;原创 2021-03-17 17:19:16 · 174 阅读 · 0 评论 -
KY73 合唱队形【最大上升子序列的应用】
原理:最大上升子序列此题思路分析:https://www.bilibili.com/video/BV1qy4y1e7bX?from=search&seid=1474087574309940493代码:#include <iostream>#include <algorithm>#include <cstring>#include <map>using namespace std;int a[105];int dp1[105];i原创 2021-03-17 16:55:56 · 150 阅读 · 0 评论 -
KY78 最大上升子序列和【与某题几乎相同】
分析:地址代码:#include <iostream>#include <algorithm>#include <cstring>#include <map>using namespace std;int a[1005];int dp[1005];int fun(int n){ if(dp[n]>=0) return dp[n]; int ans; if(n==0) ans =原创 2021-03-17 15:33:45 · 384 阅读 · 0 评论 -
KY66 点菜问题【0-1背包问题】
记忆性递归法:此题与之前的神奇的口袋极其相似。#include <iostream>#include <cstring>#include <algorithm>using namespace std;int cost[105];int score[105];int dp[105][1005]; //dp记忆方程int fun(int n,int money){ //n为当前的下标,money为剩余的钱 if(dp[n][money]>原创 2021-03-16 18:05:30 · 213 阅读 · 0 评论 -
KY63 最大子矩阵【二维前缀和】
二维前缀和:学习地址代码:#include <iostream>#include <cstring>#include <climits>using namespace std;int sum[105][105];int get(int x,int y,int n){ //x,y是子矩阵的左上角 int mx=INT_MIN,t; for(int i=x;i<=n;i++){ for(int j=y;j&l原创 2021-03-16 16:34:22 · 131 阅读 · 0 评论 -
KY56 数制转换
#include <iostream>#include <cstring>#include <algorithm>using namespace std;int main(){ int a,b,t,temp,carry; string n,ans; while(scanf("%d",&a)!=EOF){ cin>>n; cin>>b; int len=n.l原创 2021-03-16 12:44:20 · 110 阅读 · 0 评论 -
KY52 位操作练习
#include <iostream>#include <cstring>#include <algorithm>using namespace std;int main(){ unsigned short x,y; //short表示-32768~+32767,则unsigned short表示0~65535 while(cin>>x>>y){ int i; for(i=0;i<原创 2021-03-15 19:06:49 · 114 阅读 · 0 评论 -
KY43 全排列
分析:点击代码:#include <iostream>#include <cstring>#include <algorithm>using namespace std;void swap(char a[],int i, int j){ char t=a[i]; a[i]=a[j]; a[j]=t;}void fun(char num[],int n,int m){ //n为递归的剩余部分的初始元素,m为最大的下标原创 2021-03-15 16:17:46 · 201 阅读 · 0 评论 -
KY42 进制转换【模拟法】
思路:模拟短除法:带入下面的代码,分析此方法。111 //10进制初始值num:055 ans:1i:1num:027 ans:11num:013 ans:111num:006 ans:1111i:2num:003 ans:11110num:001 ans:111101num:000 ans:1111011i:31101111 //答案代码:#include <iostream>#include <algorithm>using原创 2021-03-14 16:23:33 · 234 阅读 · 0 评论 -
KY39 大整数的因子【基于大数除法原理】
#include <iostream>#include <cstring>using namespace std;int main(){ char c[31]; while(cin>>c){ if(strcmp(c,"-1")==0) return 0; int a[31],len=strlen(c); for(int i=0;i<len;i++){原创 2021-03-14 15:08:41 · 103 阅读 · 0 评论 -
KY32 日志排序
sscanf的用法:https://www.runoob.com/cprogramming/c-function-sscanf.htmlhttps://www.cnblogs.com/caijiaming/p/10349000.html代码:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>usin原创 2021-03-10 11:12:14 · 108 阅读 · 0 评论 -
KY25 剩下的树
#include <iostream>#include <cstring>#include <cstdio>using namespace std;int main(){ int n,m,left,right; while(scanf("%d %d",&n,&m)!=EOF){ int a[10005]={0}; for(int i=0;i<m;i++){ cin>原创 2021-03-09 13:18:13 · 57 阅读 · 0 评论 -
KY24 N的阶乘【大数阶乘】
#include <iostream>#include <cstring>#include <cstdio>using namespace std;int main(){ int n,a[100000],k,t; //地址空间一定要开大!! while(scanf("%d",&n)!=EOF){ fill(a,a+100000,0); k=1; a[0]=1; if(n&g原创 2021-03-09 12:45:03 · 117 阅读 · 0 评论 -
阶乘分解【20年复试上机真题】
#include <iostream>#include <algorithm>#include <cmath>#include <cstring>#include <map>#include <cstdio>using namespace std;int main(){ int n,k=0; int prime[30]={0}; for(int i=2;i<=100;i++){原创 2021-03-08 14:54:30 · 144 阅读 · 0 评论 -
大仙来了【20年复试上机真题】
实例:1965 1 12013 12 182010 2 11999 7 242008 1 13代码:**#include <iostream>#include <algorithm>#include <cmath>using namespace std;int judge(int n){ if((n%4==0&&n%100!=0)||n%400==0) return 1; return 0;}in原创 2021-03-08 13:26:10 · 335 阅读 · 3 评论 -
守形数【20年复试上机真题】
#include <iostream>#include <algorithm>#include <cmath>using namespace std;int judge(long long n){ long long pow=n*n; int p[100],a[10],i=0,j=0; while(pow){ p[i++]=pow%10; pow/=10; }// for(int k=0;k原创 2021-03-08 12:43:42 · 99 阅读 · 0 评论 -
复利计息法【20年复试上机真题】
#include <iostream>#include <algorithm>#include <cmath>using namespace std;int judge(double a,int b,double c,double x){ double n; for(int i=1;i<=b;i++){ n=a*(1+x)-c; a=n; } if(fabs(n)<0.1)原创 2021-03-08 12:24:33 · 342 阅读 · 0 评论 -
KY59 神奇的口袋【和某题相同原理!!】
前身题此题将之前代码的或者符号改成加号暴力递归:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int a[20];int fun(int n,int M){ //当前为结尾凑成的最少张数; if(M==0) return 1原创 2021-03-07 15:34:41 · 99 阅读 · 0 评论 -
最长上升子序列【动态规划】
【题目描述】给定N个数,求这N个数的最长上升子序列的长度。【样例输入】53 7 1 2 5【样例输出】3思路:对于每个位置的数值而言,最小的上升序列是其本身,即长度为1。因此在循环当前数值之前的数据时候,只有比他小的才能加入以他为结尾的最长上升序列。不妨记fun(n)为:以第n个数据为结尾的最长上升序列个数。则,以上述的样例得:fun(1)=1【没有前序,则为本身长度】fun(2)=2【 3 7 所组成的长度】fun(3)=1【前序都比1大,则为本身长度】fun(4原创 2021-03-07 14:09:02 · 162 阅读 · 0 评论 -
KY41 放苹果
分析:设f(m,n)为m个苹果,n个盘子的放法数目,则先对n作讨论,当n>m:则必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即 if(n>m) f(m,n) = f(m,m)当n<= m:不同的放法可以分成两类:含有0的方案数,不含有0的方案数 含有0的方案数,即有至少一个盘子空着,即相当于f(m,n)=f(m,n-1);不含有0的方案数,即所有的盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m,n)=f(m-n,n)原创 2021-03-07 12:07:48 · 124 阅读 · 0 评论