考研机试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::vectorvector<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*200cout<<"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.hqwc.cn/news/504402.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识C语言—常见关键字

变量的命名最好有意义 名字必须是字母&#xff0c;数字&#xff0c;下划线组成&#xff0c;不能有特殊字符&#xff0c;同时不能以数字开头 变量名不能是关键字 typedef---类型定义&#xff0c;类型重命名 #include <stdio.h>typedef unsigned int uint; //将unsigne…

第七十二天 漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

第72天 漏洞发现-Web框架中间件&联动&Goby&Afrog&Xray&Awvs&Vulmap 知识点&#xff1a; 1、Bup简单介绍&使用说明 2、Xray简单介绍&使用说明 3、AWWS简单介绍&使用说明 4、Goby简单介绍&使用说明 5、Afrog简单介绍&使用说明 6、…

Qt/自定义控件的封装

新建文件&#xff0c;选择Qt设计师界面类 创建空界面 这是自己控件封装的文件&#xff0c;双击跳转到设计界面进行设计 跳转到其他的ui界面&#xff0c;创建一个widget 右键&#xff0c;选择提升为 在提升的类名称输入刚刚创建的类名&#xff0c;添加后选择提升&#xff0c;勾选…

2024年经典【自动化面试题】附答案

一、请描述一下自动化测试流程&#xff1f; 自动化测试流程一般可以分为以下七步&#xff1a; 编写自动化测试计划&#xff1b; 设计自动化测试用例&#xff1b; 编写自动化测试框架和脚本&#xff1b; 调试并维护脚本&#xff1b; 无人值守测试&#xff1b; 后期脚本维…

C++:内存管理|new和delete

创作不易&#xff0c;感谢三连支持&#xff01; 一、内存分布 为什么需要内存管理呢&#xff1f;&#xff1f;因为我们在程序的运行过程中会需要各种各样的数据&#xff0c;而我们根据数据的不同存储在不同的区域里面&#xff0c;是为了更高效地处理数据。而C语言相比Java来说…

可视化场景(1):销售业绩大屏-是骡子是马,牵出溜溜

销售业绩可视化大屏的是一种有力的销售数据管理工具&#xff0c;贝格前端工场分享一批给友友们&#xff0c;如需要定制&#xff0c;可以与我们联络&#xff0c;开始了。 销售业绩可视化大屏是一种将销售数据以图表、数字、文字等形式展示在大屏幕上的数据可视化工具。它的作用主…

flutter 文字一行显示,超出换行

因为app有多语言&#xff0c;中文和其他语言长度不一致&#xff0c;可能导致英文会很长。 中文样式 英文样式 代码 Row(mainAxisAlignment: MainAxisAlignment.end,crossAxisAlignment: CrossAxisAlignment.end,children: [Visibility(visible: controller.info.fee ! null,ch…

图论 - Trie树(字符串统计、最大异或对)

文章目录 前言Part 1&#xff1a;Trie字符串统计1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 Part 2&#xff1a;最大异或对1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 前言 本篇博客将介绍Trie树的常见应用&#xff0c;包括&#xff1a;Trie…

Java中心校智慧校园智慧班牌物联网平台源码

目录 智慧班牌 班牌首页 班级信息 课表信息 视频 图片 进离校管理 人脸登录页 学生个人中心 请假管理 成绩管理 家长留言 学生绑卡 学生评价 系统设置 通知管理 值日管理 倒计时 班级德育 班牌模式 1.课堂授课模式 2.家长会签到模式 3.考场模式 4.班级…

二级医院云HIS系统,云HIS源码,支持分院HIS,集团HIS

云HIS具有可扩展、易共享、易协同、低成本、体验号、更便捷、易维护的优势&#xff0c;重新定义了数字化医院信息系统&#xff0c;实现数字化医院信息系统的转型升级。云 HIS 系统功能完善&#xff0c;涵盖临床各业务部门&#xff0c;采集、抽提、汇总、存贮、展现所有的临床诊…

【Logback】Logback 的配置文件

目录 一、初始化配置文件 1、logback 配置文件的初始化顺序 2、logback 内部状态信息 二、配置文件的结构 1、logger 元素 2、root 元素 3、appender 元素 三、配置文件中的变量引用 1、如何定义一个变量 2、为变量设置默认值 3、变量的嵌套 In symbols one observe…

spring-security 项目实战(一)个人健康档案

spring-security 项目实战&#xff08;一&#xff09;个人健康档案 项目说明项目地址框架信息 代码分析配置类解析默认登录页登录接口执行逻辑登录认证成功之后重定向到main页面过程未登录之前访问 /main生成默认登录页点击登录 登录之后访问 /main执行流程清空认证信息 项目来…