考研机试C++题目精选

news2024/9/20 9:27:59

更多内容会在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.coloradmin.cn/o/1480689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】长短期记忆网络(LSTM,Long Short-Term Memory)

这是一种特殊的循环神经网络&#xff0c;能够学习数据中的长期依赖关系&#xff0c;这是因为模型的循环模块具有相互交互的四个层的组合&#xff0c;它可以记忆不定时间长度的数值&#xff0c;区块中有一个gate能够决定input是否重要到能被记住及能不能被输出output。 原理 黄…

B端系统:导航机制设计,用户体验提升的法宝

Hi&#xff0c;大家好&#xff0c;我是贝格前端工场&#xff0c;从事8年前端开发的老司机。很多B端系统体验不好很大一部分原因在于导航设计的不合理&#xff0c;让用户无所适从&#xff0c;大大降低了操作体验&#xff0c;本文着重分析B端系统的导航体系改如何设计&#xff0c…

android零基础入门,零基础入门android

工欲行其事&#xff0c;必先利其器 1.B4A B4A是Android的基础版&#xff0c;这是一种可简化编程的Android的应用程序开发工具。这是一个IDE&#xff0c;可以允许开发者使用Basic语言来创建Android移动应用。Basic语言是一种过程化编程语言&#xff0c;因为其简单易学&#xff…

SCA软件成分同源分析-代码匹配技术

被检项目源代码的识别在多个语言解析器的支持下工作&#xff0c;根据不同匹配算法&#xff0c;可以计算与特征值索引数据库的匹配情况。针对强匹配算法&#xff0c;源代码的特征值必须与索引数据库的特征值一致&#xff0c;才可认为是该开源组件&#xff1b;针对非强匹配算法&a…

快速批量检测paypal账号

在跨境电商中&#xff0c;通常用多个paypal来收款&#xff0c;但是paypal账号经常会被封禁&#xff0c;如何快速查看paypal账号是否正常&#xff0c;成为跨境电商一个难题。 发现一个工具网站&#xff0c;可以试试

从预训练到通用智能(AGI)的观察和思考

1.预训练词向量 预训练词向量&#xff08;Pre-trained Word Embeddings&#xff09;是指通过无监督学习方法预先训练好的词与向量之间的映射关系。这些向量通常具有高维稠密特征&#xff0c;能够捕捉词语间的语义和语法相似性。最著名的预训练词向量包括Google的Word2Vec&#…

写作软件,批量写作文章的软件

在信息爆炸的时代&#xff0c;写作软件成为许多人提高效率、优化内容的利器。本文将介绍6款不同的写作软件&#xff0c;以及知名的147GPT生成工具和文心一言AI生成软件&#xff0c;它们不仅可以帮助用户快速生成原创文章&#xff0c;还支持全自动SEO优化&#xff0c;提升文章在…

无字母数字rce总结(自增、取反、异或、或、临时文件上传)

目录 自增 取反 异或 或 临时文件上传 自增 自 PHP 8.3.0 起&#xff0c;此功能已软弃用 在 PHP 中&#xff0c;可以递增非数字字符串。该字符串必须是字母数字 ASCII 字符串。当到达字母 Z 且递增到下个字母时&#xff0c;将进位到左侧值。例如&#xff0c;$a Z; $a;将…

GaussDB跨云容灾:实现跨地域的数据库高可用能力

背景 金融、银行业等对数据的安全有着较高的要求&#xff0c;同城容灾建设方案&#xff0c;在绝大多数场景下可以保证业务数据的安全性&#xff0c;但是在极端情况下&#xff0c;如遇不可抗力因素等&#xff0c;要保证数据的安全性&#xff0c;就需要采取跨地域的容灾方案。 …

专访win战略会任志雄:澳门旅游业复苏 挖掘游客消费潜力

南方财经:各个国家地区的客商都有不同文化背景和消费习惯,应如何更好吸引外地客商来澳门? win战略会任志雄:首先,周边国家的市场潜力都非常大,包括韩国、日本、越南和印度。 这些年来,这些国家的经济增长都很高,居民的出游比重也在持续增加,如果他们国家的居民把澳门作为一个重…

计算机专业大学生的简历,为何会出现在垃圾桶

为什么校招过后垃圾桶里全是简历&#xff0c;计算机专业的学生找工作有多难&#xff1f; 空哥这么跟你说吧&#xff0c;趁现在还来得及&#xff0c;这些事情你一定要听好了。 第一&#xff0c;计算机专业在学校学的东西是非常有限的&#xff0c;985211的还好&#xff0c;如果…

HS6621Cx 一款低功耗蓝牙SoC芯片 应用于键盘、鼠标和遥控器消费类产品

HS6621Cx是一款功耗优化的真正片上系统 (SOC)解决方案&#xff0c;适用于低功耗蓝牙和专有2.4GHz应用。它集成了高性能、低功耗射频收发器&#xff0c;具有蓝牙基带和丰富的外设IO扩展。HS6621Cx还集成了电源管理功能&#xff0c;可提供高效的电源管理。它面向2.4GHz蓝牙低功耗…

Spring AI上架,打造专属业务大模型,AI开发再也不是难事!

Spring AI 来了 Spring AI 是 AI 工程师的一个应用框架&#xff0c;它提供了一个友好的 API 和开发 AI 应用的抽象&#xff0c;旨在简化 AI 应用的开发工序。 提供对常见模型的接入能力&#xff0c;目前已经上架 https://start.spring.io/&#xff0c;提供大家测试访问。&…

第二节 数学知识补充

一、线性代数 向量的 L 2 L_2 L2​范数&#xff08;Euclidean范数/Frobenius范数&#xff09;&矩阵的元素形式范数 向量的 L 2 L_2 L2​范数&#xff1a; ∣ ∣ x ∣ ∣ 2 ( ∣ x 1 ∣ 2 ⋯ ∣ x m ∣ 2 ) 1 2 ||x||_2(|x_1|^2\cdots|x_m|^2)^{\frac12} ∣∣x∣∣2​(∣…

【Java项目介绍和界面搭建】拼图小游戏——添加图片

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

LLM 聊天对话界面chatwebui 增加实时语音tts功能

类似豆包聊天,可以实时语音回复 1、聊天界面 streamlit页面 参考界面:https://blog.csdn.net/weixin_42357472/article/details/133199866 stream_web.py 2、 增加实时语音tts功能(接入melotts api服务) 参考:https://blog.csdn.net/weixin_42357472/article/detai…

解决GitHub无法访问的问题:手动修改hosts文件与使用SwitchHosts工具

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

Javaweb day7

前后端分类开发 Yapi 环境配置 vue项目简介 项目启动 更改端口号 vue项目开发流程

RK3568驱动指南|第二篇 字符设备基础-第7章 menuconfig图形化配置实验(二)

7.2 Kconfig 语法简介 上一小节我们打开的图形化配置界面是如何生成的呢&#xff1f;图形化配置界面中的每一个界面都会对应一个Kconfig文件。所以图形化配置界面的每一级菜单是由Kconfig文件来决定的。 图形化配置界面有很多菜单。所以就会有很多Kconfig文件&#xff0c;这也就…

优思学院|3步骤计算出Cpk|学习Minitab

在生产和质量管理中&#xff0c;准确了解和控制产品特性至关重要。一个关键的工具是Cpk值&#xff0c;它是衡量生产过程能力的重要指标。假设我们有一个产品特性的规格是5.080.02&#xff0c;通过收集和分析过程数据&#xff0c;我们可以计算出Cpk值&#xff0c;进而了解生产过…