考研机试C++题目精选

更多内容会在godownio.github.io更新

算法练习(C++代码)

考研上机或C语言代码笔试准备,暨大机试原题+letcode+牛客+中南大等高校机试

快速幂算法

题目:输入一个整数 n ,求 n^n 的个位数是多少。

快速幂算法:指数为偶数,则底数平方,指数除二;指数为奇数,则指数减一再把结果乘底数,底数平方,指数除二。指数看作二进制,除二可以看作位运算。

#include <iostream>

using namespace std;
int main(){
	int n;
	cin>>n;
	int power=n;
	int base=n;
	int result = 1;
	while(power>0){
		if(power%2==1){
			result *= base;
			power /= 2;
			base *= base;//指数为奇数,先乘底数。除二小数部分舍去。底数平方 
		}
		else{
			power /= 2;
			base *= base;//指数为偶数,除二,底数平方 
		}
	}
	cout<<result<<endl; 
	cout<<result%10;//mod 10即个位数
}

image-20240301105155142

斐波那契

输入一个整数 n ,求斐波那契数列的第 n 项。第一项是1, 第二项是1。要求必须递归!

#include <iostream>

using namespace std;

int f(int n){
    if(n==1||n==2){
        return 1;
    }
    else return f(n-2)+f(n-1);
}

int main(){
    int n;
    cin >> n;
    cout<<f(n);
}

成绩排名

对 n 个同学的考试成绩从大到小排名,成绩相同的算同一名。求排名为 m 的成绩。若无排名为m的成绩,输出最后一名的成绩。

  • 输入格式

一共三行

第一行:一个整数 n,表示同学的个数。

第二行:n 个整数,表示 n 个同学的成绩。

第三行:一个整数 m,表示排名。

  • 输出格式

一个整数,表示排名为 m 的成绩。

  • 输入样例

6
100 100 99 98 97

2

  • 输出样例

99

#include <iostream>

using namespace std;
int main(){
	int n,m;
	cout<<"输入同学个数:"<<endl;
	cin>>n;
	int score[n];
	cout<<"输入同学的成绩:"<<endl;
	for (int i=0;i<n;i++){
		cin>>score[i];
	}
	//cout<<"1";
	for (int i=0;i<n;i++){
		for(int j=n-i-1;j>0;j--){
			if(score[j]>score[j-1]){
				int temp = score[j];
				score[j] = score[j-1];
				score[j-1] = temp;
			}
		}//冒泡排序
	}
	int i=0,j;
	for(j=1;j<n;j++){
		if(score[j]!=score[i]){
			score[++i]=score[j];
		}
	}//双指针去重
	cout<<"输入要查询的排名:"<<endl;
	cin>>m;
	if(m>i+1){
		cout<<score[i]<<endl; 
	}
	else{
		cout<<score[m-1];
	}
}

括号匹配

给定三种括号{ },[ ], ( ),和若干小写字母的字符串,请问改字符串的括号是否匹配(可以嵌套)?

  • 输入输出

输入格式:字符串s。 输出格式:若匹配,输出yes,否则输出no。

  • 输入样例
{[a(v)d]q}
  • 输出样例
yes
#include <iostream>
#include <stack>

using namespace std;
int main(){
	stack <int> s;
	string strs;
	cin>>strs;
	int m = strs.length();
	for (int i=0;i<m;i++){
		if(strs[i]=='('||strs[i]=='{'||strs[i]=='['){
			s.push(strs[i]);
		}
		if(strs[i]==')'){
			if(!s.empty()&&s.top()=='(') s.pop();
			else{
				cout<<"不匹配"; 
				return 0;
			}
		}
		else if(strs[i]=='}'){
			if(!s.empty()&&s.top()=='{') s.pop();
			else{
				cout<<"不匹配"; 
				return 0;
			}
		}
		else if(strs[i]==']'){
			if(!s.empty()&&s.top()=='[') s.pop();
			else{
				cout<<"不匹配"; 
				return 0;
			}
		}//特别注意,栈为空s.top()不返回NULL,而是程序出错
	}
	if (s.empty()) cout<<"匹配成功";
	else cout<<"匹配失败";
	return 0;
} 

letcode&牛客dp+链表

不同路径

image-20240301105643910

先看递归解决:很明显从右下角开始思考,有从上和从左过来两种方式,即等于左和上路径条数之和。1*2,1*3…等很明显只有一条路径,即m or n一个为1,则返回1

#include <iostream>

using namespace std;

int path(int m,int n){
	if(m>1&&n>1){
		return path(m-1,n)+path(m,n-1);
	}else return 1;//1*2或者2*1或者1*6的路径选择都为1个 
}

int main(){
	int m,n;
	cin>>m>>n;
	cout<<path(m,n);
}

很遗憾,递归不满足时间复杂度。

非递归解决:定义一个dp数组,记录每个格子的路径条数,即除一行一列外,每个格子的路径条数都等于上+左

#include <iostream>

using namespace std;

int path(int m,int n){
    int dp[m][n];
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
        	if(j>0&&i>0){
        		dp[i][j]=dp[i-1][j]+dp[i][j-1];
    		}
            else{
                dp[i][j]=1;
            }
        }
    }
    return dp[m-1][n-1];
}

int main(){
	int m,n;
	cin>>m>>n;
	cout<<path(m,n);
}

image-20240301112745113

障碍物版不同路径

image-20240301112906322

首先,怎么输入和传参二维数组?

不能直接向某个变量cin二维数组,只能先输入行和列,然后再逐个输入,传参就用vector,因为C++传参定长,不能使用int[][] matrix,而是int matrix[][3]这种,不如使用vector方便

其次,障碍物点到达它的路径条数为0,其余按照上个题目进行计算即可

不能直接把数组传给vector,需要先进行类型转换:

int arr[rows][cols] = {{0, 0, 0}, {0, 1, 0}, {0, 0, 0}};

 // 将数组转换为 std::vector
 vector<vector<int>> matrix;
 for (int i = 0; i < rows; ++i) {
     matrix.push_back(vector<int>(begin(arr[i]), end(arr[i])));
 }

注意:devC++的标准无法读取vector库,需要在编译选项->添加参数"–std=c++11"

image-20240301154601417

image-20240301154628495

#include <iostream>
#include <vector>

using namespace std;
int path(vector<vector<int>>& block){
    int m=block.size(),n=block[0].size();
    vector<vector<int>> dp(m,vector<int>(n));
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(block[i][j]==0){
                if(j>0&&i>0){
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];
                }else{
                    dp[i][j]=1;//第一行或第一列
                }
            }else{
                dp[i][j]=0;//有障碍物
            }
        }
    }
    return dp[m-1][n-1];
}
int main(){
    int rows,cols;
    cout<<"请输入行数和列数:"<<endl;
    cin>>rows>>cols;
    vector<vector<int>> block(rows,vector<int>(cols));
    cout<<"请依次输入矩阵:"<<endl;
    for(int i=0;i<rows;i++){
        for(int j=0;j<cols;j++){
            cin>>block[i][j];
        }
    }
    cout<<"左上到右下路径条数为:"<<path(block);
    return 0;
}

秒了

image-20240301154356385

最小路径和

太经典了,和回复祝顺利一样经典

image-20240301155000648

根据上两道题,不难猜出每个位置的dp最小值为min(上,左)+本块值,第一行则只能左+本块值,第一列则只能上+本块值,秒了

#include <iostream>
#include <vector>

using namespace std;
int min(int n,int m){
    if(n>m) return m;
    else return n;
}
int path(vector<vector<int>>& block){
    int m=block.size(),n=block[0].size();
    vector<vector<int>> dp(m,vector<int>(n));
    dp[0][0]=block[0][0];
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(i>0&&j==0){
                dp[i][j]=dp[i-1][j]+block[i][j];//第一行
            }
			if(j>0&&i==0){
                dp[i][j]=dp[i][j-1]+block[i][j];//第一列
            }
			if(j>0&&i>0){
                dp[i][j]=min(dp[i][j-1],dp[i-1][j])+block[i][j];
            }
        }
    }
    return dp[m-1][n-1];
}
int main(){
    int rows,cols;
    cout<<"请输入行数和列数:"<<endl;
    cin>>rows>>cols;
    vector<vector<int>> block(rows,vector<int>(cols));
    cout<<"请依次输入矩阵:"<<endl;
    for(int i=0;i<rows;i++){
        for(int j=0;j<cols;j++){
            cin>>block[i][j];
        }
    }
    cout<<"左上到右下最短路径和为:"<<path(block);
    return 0;
}

image-20240301161828856

image-20240301161842319

image-20240301161914523

other 机试题

中南大上机压轴

506ec55b1cc642a7afb2c28c5d175ce8

水印是我的CSDN号

  • 测试数据:

3 500
0.6 100
0.8 200
0.7 100
输出 390

​ 首先要对输入的折扣进行排序,优先使用比率低的z进行支付。
​ 然后用lowcost记录目前多少钱是打过折的。T-lowcost就是剩余没打折的。
​ 每次循环用上一个人的折扣额度。若所有人折扣额度相加低于总价,则最后剩的部分就不打折

#include <iostream>
using namespace std;

int paychase(int N,int T,double *z,int* H){
	int lowcost = 0;
	for(int i=0;i<N;i++){
		if(T<=lowcost+z[i]*H[i]){
			T = lowcost + (T-lowcost)*H[i];
			return T;
		}//菜品总价小于折扣
		else{
			lowcost = lowcost + z[i]*H[i];//lowcost为当前折扣限度,比如第二轮中就是0.6*100+0.8*200
			cout<<"lowcost:"<<lowcost<<endl;
			T = T - H[i] + z[i]*H[i];//折扣
			cout<<"T:"<<T<<endl;
		}
	}
	return T;
}

int main(){
	int N,T;
	cout<<"请输入人数和菜品总价:"<<endl;
	cin>>N>>T;
	double z[N];
	int H[N];
	cout<<"请输入每个的折扣率和折扣上限:"<<endl;
	for(int i=0;i<N;i++){
		//cout<<i<<endl;
		cin>>z[i]>>H[i];
	}
	for (int i=0;i<N;i++){
		for (int j=i;j<N;j++){
			if(z[j]>z[i]){
				double tempz;int tempH;
				tempz=z[j];z[j]=z[i];z[i]=tempz;
				tempH=H[j];H[j]=H[i];H[i]=tempH;
			}
		}//折扣排序
	}
	int cost = paychase(N,T,z,H);
	cout<<"本次用餐总花费:"<<cost<<endl;
	return 0;
}

日期

输入日期yyyymm dd,输出是本年第几天。

本题主要知识点:年份满足以下条件之一为闰年,2月有29天:

  • 年份能被4整除,不能被100整除
  • 年份能被400整除

代码不写了

C语言考点

指针数组,数组指针

区分int (*p)[3] int *p[3]

  • 指针数组:int *p[3],实际上是个数组,只是里面元素都存放的指针,指针指向int型变量地址。
  • 数组指针:int (*p)[3],优先级()>[]>*,实际上是定义的一个指针,指向一个包含三个整数的数组。
int **p

int **p是一个指针的指针。

赋值判断

int *a=&b(√)

int a=&b(×)

int *a; a=&b(√)

记住只有指针才能存地址,整型那些都不能存地址。以及int *a后,*a才是取值,a是指向的地址。

后文会更密码学和C易错点记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/423574.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

集合篇之ArrayList

一、源码如何分析&#xff1f; 1.成员变量 2.构造方法 3.关键方法 一些添加的方法。 二、debug看源码 我们给出下面代码&#xff1a; public void test01() {ArrayList<Integer> list new ArrayList<>();list.add(1);for (int i 2; i < 10; i) {list.add(i…

Java虚拟机(JVM)从入门到实战【上】

Java虚拟机&#xff08;JVM&#xff09;从入门到实战【上】&#xff0c;涵盖类加载&#xff0c;双亲委派机制&#xff0c;垃圾回收器及算法等知识点&#xff0c;全系列6万字。 一、基础篇 P1 Java虚拟机导学课程 P2 初识JVM 什么是JVM Java Virtual Machine 是Java虚拟机。…

Flutter中Future和Stream关系

Future和Stream类是Dart异步编程的核心。 Future 表示一个不会立即完成的计算过程。与普通函数直接返回结果不同的是异步函数返回一个将会包含结果的 Future。该 Future 会在结果准备好时通知调用者。 Stream 是一系列异步事件的序列。其类似于一个异步的 Iterable&#xff0c;…

(三)softmax分类--九五小庞

softmax分类 对数几率回归解决的是二分类的问题&#xff0c;对于多个选项的问题&#xff0c;我们可以使用softmax函数&#xff0c;它是对数几率回归在N个可能不同的值上的推广 softmax各样本分量之和为1&#xff0c;当只有两个类别时&#xff0c;与对数几率回归完全相同 损失…

多个版本的Python如何不冲突?

转载文章&#xff0c;防止忘记或删除 转载于&#xff1a;电脑中存在多个版本的Python如何不冲突&#xff1f; - 知乎 (zhihu.com) 如何安装多版本的Python并与之共存&#xff1f; 如果你的工作涉及到Python多版本之间开发或测试&#xff0c;那么请收藏本文&#xff0c; 如果你…

Jvm之内存泄漏

1 内存溢出 1.1 概念 java.lang.OutOfMemoryError&#xff0c;是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现OutOfMemoryError。产生该错误的原因主要包括&#xff1a;JVM内存过小。程序不严密&#xff0c;产生了过多的垃圾。 程序体现: 内…

CSS 【详解】响应式布局(含 rem 详解)

响应式布局&#xff1a; 同一页面在不同的屏幕上有不同的布局&#xff0c;即一套代码自适应不同的屏幕。 为什么 rem 能用于实现响应式布局&#xff1f; px 绝对长度单位&#xff0c;不同客户端表现都相同&#xff0c;不具有响应式em 相对长度单位&#xff0c;相对于父元素的 f…

【MATLAB源码-第147期】基于matlab的QPSK调制解调在AWGN信道,瑞利信道,莱斯信道理论与实际误码率对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 四相位移键控&#xff08;QPSK&#xff0c;Quadrature Phase Shift Keying&#xff09;是一种重要的数字调制技术&#xff0c;它通过改变信号的相位来传输数据。与其他调制技术相比&#xff0c;QPSK在相同的带宽条件下能够传…

【HTML】HTML基础4.2(锚点链接)

目录 解释锚点链接 “公式” 例子 点击回首页 解释锚点链接 在我们浏览网页的时候&#xff0c;总有目录一样的功能&#xff0c;比如 这个时候&#xff0c;只要点击相应目录&#xff0c;就可以直接跳转到相应界面&#xff0c;比如&#xff0c;点击“演职员表” 今天就让我们一…

Leetcode438. 找到字符串中所有字母异位词 -hot100

题目&#xff1a; 代码(首刷看解析 2024年3月2日&#xff09;&#xff1a; 感觉自己这个ac率根本不可能找得到实习 class Solution { public:vector<int> findAnagrams(string s, string p) {int plen p.size(), slen s.size();if (slen < plen) return {};vector…

蓝桥杯备战刷题four(自用)

1.砝码称重 #include <iostream> #include <vector> using namespace std; const int N110; const int M100010; int w[N]; int n; int f[N][M]; int m; int ans; //f[i][j]表示到第i个砝码进行放置时的称得的重量为j的方案数 int main() {cin>>n;for(int i1…

【解决(几乎)任何机器学习问题】:交叉验证

在上⼀章中&#xff0c;我们没有建⽴任何模型。原因很简单&#xff0c;在创建任何⼀种机器学习模型之前&#xff0c;我们必须知道什么是交叉检验&#xff0c;以及如何根据数据集选择最佳交叉检验数据集。 那么&#xff0c;什么是 交叉检验 &#xff0c;我们为什么要关注它&…

HelixToolKit的模型旋转操作

前面加载了模型以后&#xff0c;鼠标拖动和缩放比较好操作&#xff1b;但是旋转似乎没有&#xff0c; 操作了一阵&#xff0c;也不是没有&#xff0c;应该是还不熟悉&#xff1b; 旋转的指示器在右下角&#xff0c;现在U面看到正面&#xff0c; 想看一下模型的背面&#xff0…

2024年最免费的DAW混音编曲FL Studio21.2.3.4004中文破解版下载

FLStudio21.2.3.4044中文破解版完整下载是最好的音乐开发和制作软件也称为水果循环。它是最受欢迎的工作室&#xff0c;因为它包含了一个主要的听觉工作场所。最新fl studio破解版有不同的功能&#xff0c;如它包含图形和音乐音序器&#xff0c;帮助您使完美的配乐在一个美妙的…

powershell常用命令分类

powershell常用命令分为三类&#xff1a;get类、set类、write类。 一 Get类 1.Get-Command &#xff1a; 得到所有PowerShell命令&#xff0c;获取有关 cmdlet 以及有关 Windows PowerShell 命令的其他元素的基本信息。包括Cmdlet、Alias、Function。 2.Get-Process &#xf…

【Java实战项目】SpringBoot + Vue3打造你的在线电子书平台!

今天给大家分享一个基础的Java实战项目&#xff0c;用SpringBoot和Vue3开发一个电子书平台&#xff0c;大家可以尝试做一下这个项目&#xff0c;以此来检验这段时间的学习成果&#xff01;废话不多说&#xff0c;下面正式进入项目&#xff1a; 一、项目介绍 1. 项目简介 在线…

mysql数据库学习笔记2——linux系统下安装,对库,表的基本操作语句

关于在linux系统下安装可以查看linux 安装mysql服务&#xff08;超详细&#xff09;_cannot write to-CSDN博客相关教程 对库的一些操作有 show databases查看有哪些数据库&#xff0c;create database “新建数据库名称” 创建新的数据库&#xff0c;use “数据库名称”切换…

H12-821_106

106.如图所示&#xff0c;RTA的GEO/0/0、GEO/0/1接口分别连接部门1和2&#xff0c;其网段分别为10.1.2.0/24、10.1.3.0/24网段&#xff0c;为限制部门1和2之间的相互访间&#xff0c;在RTA上部署traffic-filter&#xff0c;以下哪些部署方式是正确&#xff1f; A.配置ACL3000拒…

基于NSFW数据集的违规图片检测系统

目录 一、功能介绍 二、安装部署说明 2.1数据集简介 2.2文件目录说明 一、功能介绍 本程序是一个违规图片检测系统&#xff0c;能够识别用户上传的信息图片&#xff0c;是否包含有敏感&#xff08;NSFW&#xff0c;Not Safe For Work&#xff09;信息。 本程序使用雅虎开源的NS…

pikachu验证XXE漏洞

先随便输入一个内容查看 服务器有回显 接下来用bp抓包看下参数 有个xml参数&#xff0c;而且Content-Type: application/x-www-form-urlencoded&#xff0c;我们传入url编码后的xml内容试一下 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYP…