某名校考研自命题C++程序设计——近10年真题汇总(下)

第二期,相比上一贴本帖的题目难度更高一些,我当然不会告诉你我先挑简单的写~


某名校考研自命题C++程序设计——近10年真题汇总(上)-CSDN博客文章浏览阅读651次,点赞9次,收藏13次。本帖更新一些某校的编程真题,总体来说不难,考察的都是基本功,92高校大一期末的难度,不过有些细节颇为繁琐,各位还是需要一定程度上注意的~https://blog.csdn.net/jsl123x/article/details/144354818?spm=1001.2014.3001.5501

一.原地排序两个混乱数组

不算太难,无非就是把第二个数组中较小的元素插到第一个数组里面,然后一号里面大的放到二号里面,虽然说不允许降序处理,不过由于两个数组本身均为非降序,所以其实处理其来也很容易,遍历一遍即可~ 

因为这里的数组并非等长且未事先规定,这里我们要用到自动结束输入的操作,具体看这一片博客:

C++通过回车结束循环输入_c++输入回车结束输入-CSDN博客文章浏览阅读4.6k次,点赞2次,收藏7次。文章介绍了如何使用C++编程处理不确定数量的数字输入。通过定义一个包含行数和数值的结构体,利用vector存储数据,读取每一行的字符直到遇到换行符,然后将数据添加到结构体实例中。最后,通过迭代器输出所有存储的数值及其对应的行号。https://jslhyh32.blog.csdn.net/article/details/131623031

不过为了方便描述思想,博主这里就采用规定好的长度了,大家自行完成不定长模式:

#include <iostream>
#include <vector>
using namespace std;void Swap(int &x,int &y){int t=x;x=y;y=t;
} void fun(vector<int> &a,vector<int> &b,int lena,int lenb)
{int Min_loca=0;//在b数组中找到最小的数! for(int i=0;i<lena;i++){for(int j=0;j<lenb;j++){if(b[j]<b[Min_loca])Min_loca=j;}if(b[Min_loca]<a[i]) //如果b中最小的数比当前a中的小,就对换~ Swap(a[i],b[Min_loca]);}//对b重新排序 for(int i=0;i<lenb;i++){Min_loca=i;for(int j=i;j<lenb;j++)if(b[j]<b[Min_loca])Min_loca=j;	Swap(b[i],b[Min_loca]);}
} int main(int argc, char** argv) {int n1=0,n2=0;cin>>n1>>n2;vector<int> V1,V2;int temp=0;for(int i=1;i<=n1;i++){cin>>temp;V1.push_back(temp);}for(int i=1;i<=n2;i++){cin>>temp;V2.push_back(temp);}fun(V1,V2,n1,n2);for(int i=0;i<=V1.size()-1;i++)cout<<V1[i]<<" ";cout<<endl;for(int i=0;i<=V2.size()-1;i++)cout<<V2[i]<<" ";return 0;
}

二.人造词汇表

这题很简单的操作,先掌握一个小技巧,如下的getline函数可以接受空格字符串:(这是getline头文件里面的~)

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(int argc, char** argv) {string s;getline(cin, s);cout<<s;
}

 

其实大家会了这个就很简单了,没什么好说的。至于他说的不能重复且要排序,博主这里直接用的STL里面的set容器——其实有点耍赖了,不过该校考纲里面明确可以使用C++,感觉也不算犯规嘻嘻。另外要注意set不能随机访问,必须用迭代器来完成遍历了~ 

题目里面还说了不能存在大写字母,上一篇已经讲过例题,大家可以自己完成,博主就不再赘述了~ 

三.向量的最小内积

点乘就是内积,考研选手应该很熟悉~ 对于输入的两组向量进行排序,一组从大到小、另一组从小到大。接着,这两组向量计算所得的内积即为最小内积。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main(int argc, char** argv) {int n=0;vector<int> V1,V2;cin>>n;int temp=0;for(int i=1;i<=n;i++){cin>>temp;V1.push_back(temp);}for(int i=1;i<=n;i++){cin>>temp;V2.push_back(temp);}sort(V1.begin(),V1.end());sort(V2.begin(),V2.end());reverse(V2.begin(),V2.end());int count=0;for(int i=0;i<=n-1;i++)count+=V1[i]*V2[i];cout<<count; return 0;
}

没什么bug。

四.元音和辅音字母

又是那种多种if条件判断的题目——没错和黑色星期五一样恶心,截图给大家看一下答案就好,这题现在肯定不会再考了~

 

 

五.就地循环左移

具体题目找不到了,不过很简单,对元素循环左移N位,只要能理清楚下标就很容易~

#include <iostream>
#include <vector>
using namespace std;void ShiftLeft(vector<int> &V,int x)
{vector<int> temp;for(int i=1;i<=x;i++)temp.push_back(V[i-1]);//将前x位拷贝进临时数组~ for(int i=x;i<=V.size()-1;i++)V[i-x]=V[i];//1 2 3 4 5 6 (2)  3 4 5 6 1 2for(int i=V.size()-x,j=0;i<=V.size()-1;i++,j++)V[i]=temp[j];
} int main(int argc, char** argv) {int n=0;cin>>n;vector<int> V;for(int i=1;i<=n;i++)V.push_back(i);for(int i=0;i<=V.size()-1;i++)cout<<V[i]<<" ";	ShiftLeft(V,3);cout<<endl;for(int i=0;i<=V.size()-1;i++)cout<<V[i]<<" ";return 0;
}

这里测试左移3位,没什么问题:

六.奇数偶数对调

依旧是老毛病,很有歧义,我们姑且认为:奇数和偶数内部之间是没有顺序要求的。可以直接用双指针,一个从头找奇数,另一个从尾找偶数,两者都找见以后再进行对调~

#include <iostream>
#include <vector>
using namespace std;void Swap(int &x,int &y){int t=x;x=y;y=t;
} void change(vector<int> &V)
{int i=0,j=V.size()-1;while(i<j){while(i<j&&V[i]%2==1)//只要是奇数就一直往后找 i++;while(i<j&&V[j]%2==0)//只要是偶数就一直往前找 j--;if(i<j)Swap(V[i],V[j]);}
} int main(int argc, char** argv) {int n=0;cin>>n;vector<int> V;for(int i=1;i<=n;i++)V.push_back(i);	change(V);for(int i=0;i<=V.size()-1;i++)cout<<V[i]<<" ";return 0;
}

没什么问题~

 

七.统计【1】的个数

直接把每个整数的每一位都分离开来,然后对比是否为【1】即可。

#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> V;int n=0,temp=0;cin>>n;temp=n;for(int i=1;i<=n;i++)V.push_back(i);for(int i=0;i<=n-1;i++)cout<<V[i]<<" "; cout<<endl;int length=0; while(temp!=0){temp/=10;length++;}int count=0;for(int i=0;i<=n-1;i++){int j=1;while(j<=length){if(V[i]%10==1)count++;V[i]/=10;j++;}}cout<<"1的个数为:"<<count<<endl;return 0; 
}

非常简单,没什么bug~ 

八.非递归的归并排序

没什么难度,各位一定要想清楚所谓的自顶向下自底向上:递归的归并排序是将数列不断划分为有序序列——也即只有一个元素的时候,再不断归并;而非递归则一开始就把每一个元素看做一个单独的有序序列,再不断合并。这里给出伪码,主要是看思想:

void MergeSortNonR(int* a, int n)
{int* tmp = (int*)malloc(sizeof(int) * n);assert(tmp);int gap = 1;//外层循环,控制gap的值,gap每次增加二倍while (gap < n){//n是数组元素个数for (int i = 0; i < n; i += 2 * gap){//归并 [i,i+gap-1] [i+gab,i+2*gap-1]int begin1 = i, end1 = i + gap - 1;int begin2 = i + gap, end2 = i + 2 * gap - 1;//处理边界值//如果是 end1 越界或者 begin2 越界,直接退出即可,不需要归并if (end1 >= n || begin2 >= n){break;}//如果是 end2 越界。需要归并if (end2 >= n){end2 = n - 1;}int index = i;while (begin1 <= end1 && begin2 <= end2){if (a[begin1] < a[begin2]){tmp[index++] = a[begin1++];}else{tmp[index++] = a[begin2++];}}while (begin1 <= end1){tmp[index++] = a[begin1++];}while (begin2 <= end2){tmp[index++] = a[begin2++];}//小区间优化拷贝回数组afor (int j = i; j <= end2; j++){a[j] = tmp[j];}}gap *= 2;}//释放free(tmp);tmp = NULL;
}

九.统计整数个数

由于是回忆版,肯定不太严谨——实际上只有0-9这10种整数。这题也非常简单,直接用散列表秒杀~

#include <iostream>
using namespace std;int main() {int hash[10]={0};int n=0,temp=0;cin>>n;for(int i=1;i<=n;i++){cin>>temp;hash[temp]++;} for(int i=0;i<=9;i++)cout<<i<<"出现了:"<<hash[i]<<"次~"<<endl;return 0; 
}

非常简单~ 

 

十.移动学生

无算法的基础题,感觉大一的oj平台特别喜欢出这种题目。。。

#include <iostream>
#include <vector>
using namespace std;struct target{int num;//学生序号 int time;//移动次数 
};int main(int argc, char** argv) {int student[10]={1,2,3,4,5,6,7,8,9,10};//题目没要求,我们这里用10模拟int m=0;cin>>m;int q=0,p=0;vector<target> V;target temp;for(int i=1;i<=m;i++){cin>>q>>p;temp.num=q;temp.time=p;V.push_back(temp);}for(int i=0;i<=V.size()-1;i++)cout<<V[i].num<<" "<<V[i].time<<endl; for(int i=0;i<=V.size()-1;i++){int q=V[i].num-1;//定位目标学生int p=q+V[i].time;//定位另一个参与交换的学生int s=0;s=student[q];student[q]=student[p];student[p]=s; }	 for(int i=0;i<=9;i++)cout<<student[i]<<" ";
}

其实这题出的不好——没有明确说明是按照原来的序号执行移位还是现有的序号执行移位,也没说明越界能不能循环移动。这里我们默认是按现有的排序,且不能循环移动,测试一下:

如上,一共移位3次:

  • 2号前移一位
  • 3号后移一位
  • 9号后移一位

没什么bug~ 


统计结束,仅供大家参考~

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

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

相关文章

探讨不同类型的自动化测试框架

以下为作者观点&#xff1a; 在自动化测试中&#xff0c;框架提供了一种组织和执行测试案例的结构化方式。它们提供了一套准则和最佳实践&#xff0c;使测试人员能够编写可重复使用、可维护和可扩展的测试脚本。在这篇文章中&#xff0c;我们将讨论自动化测试中不同类型的框架…

C# 网络编程--关于Socket编程TCP协议中封包、拆包问题

在使用 Socket 编程&#xff0c;进行TCP协议网络通信时&#xff0c;经常会遇到“粘包”&#xff08;也称为“封包、拆包”&#xff09;的问题。粘包是指发送方发送的多个数据包被接收方合并成一个数据包&#xff0c;或者一个数据包被拆分成多个数据包接收。这通常是由于 TCP协议…

HarmonyOS:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

装饰器仅能观察到第一层的变化&#xff0c;但是在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数组项class&#xff0c;或者class的属性是class&#xff0c;他们的第二层的属性变…

Excel拆分脚本

Excel拆分 工作表按行拆分为工作薄 工作表按行拆分为工作薄 打开要拆分的Excel文件&#xff0c;使用快捷键&#xff08;AltF11&#xff09;打开脚本界面&#xff0c;选择要拆分的sheet&#xff0c;打开Module&#xff0c;在Module中输入脚本代码&#xff0c;然后运行脚本 Su…

【机器人】Graspness 端到端 抓取点估计 | 论文解读

在复杂场景中实现抓取检测&#xff0c;Graspness是一种端到端的方法&#xff1b; 输入点云数据&#xff0c;输出抓取角度、抓取深度、夹具宽度等信息。 开源地址&#xff1a;GitHub - rhett-chen/graspness_implementation: My implementation of Graspnet Graspness. 论文地…

盛元广通畜牧与水产品检验技术研究所LIMS系统

一、系统概述 盛元广通畜牧与水产品检验技术研究所LIMS系统集成了检测流程管理、样品管理、仪器设备管理、质量控制、数据记录与分析、合规性管理等功能于一体&#xff0c;能够帮助实验室实现全流程的数字化管理。在水产、畜牧产品的质检实验室中&#xff0c;LIMS系统通过引入…

kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装

系列文章目录 1.kubeadm安装K8s高可用集群之基础环境配置 2.kubeadm安装K8s集群之高可用组件keepalivednginx及kubeadm部署 3.kubeadm安装K8s高可用集群之集群初始化及master/node节点加入集群calico网络插件安装 kubeadm安装K8s高可用集群之集群初始化及master/node节点加入ca…

【机器学习】以机器学习为翼,翱翔网络安全创新苍穹

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 在数字化浪潮汹涌澎湃的当下&#xff0c;网络安全如同守护数字世界的坚固堡垒&#xff0c;其重要性不言而喻。而机器学习技术的蓬勃…

go引用包生成不了vendor的问题

比如我要引入github.com/jinzhu/gorm这个包. 1. 首先获取包 go get github.com/jinzhu/gorm 这时go.mod文件中也有这个包依赖信息了. 2. 然后构建vendor go mod vendor 结果发现vendor目录下没有生成对应的包, 而且modules.txt也注释掉这个包了. 原因是没有其进行引用, go…

多模块的spring boot项目发布指定模块的脚本

我有一个多模块的Spring Boot项目&#xff0c;里面有基础模块&#xff0c;有业务模块&#xff0c;业务模块依赖一些基础模块。发布的时候&#xff0c;如果单独将某个模块发布&#xff0c;一般会报错。所以我都是整个项目&#xff0c;无论多少个模块&#xff0c;不管3721&#x…

fabric.js

目录 一、在canvas上画简单的图形 二、在canvas上用路径(Path)画不规则图形 三、在canvas上插入图片并设置旋转属性(angle) 四、让元素动起来(animate) 五、图像过滤器(filters)让图片多姿多彩 六、颜色模式(Color)和相互转换(toRgb、toHex) 七、对图形的渐变填充(Gradi…

23. 合并 K 个升序链表(java)

题目描述&#xff1a; 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a;[1,1,2,3,4,4,5,6] 解释&#xff…

爬取Q房二手房房源信息

文章目录 1. 实战概述2. 网站页面分析3. 编写代码爬取Q房二手房房源信息3.1 创建项目与程序3.2 运行程序&#xff0c;查看结果 4. 实战小结 1. 实战概述 本次实战项目旨在通过编写Python爬虫程序&#xff0c;抓取深圳Q房网上的二手房房源信息。我们将分析网页结构&#xff0c;…

【蓝桥杯】43699-四平方和

四平方和 题目描述 四平方和定理&#xff0c;又称为拉格朗日定理&#xff1a; 每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去&#xff0c;就正好可以表示为 4 个数的平方和。 比如&#xff1a; 502021222 712121222; 对于一个给定的正整数&#xff0c;可…

Kerberos身份验证

Kerberos是更现代化的身份验证协议&#xff0c;它比 NTLM 认证更安全&#xff0c;但域内某些服务仍支持 NTLM 认证。Kerberos 和 NTLM 认证一样&#xff0c;都是通过在 SSPI 接口实现的功能&#xff0c;这使得使用第三方协议&#xff08;如&#xff1a;HTTP、SMB、LDAP&#xf…

达梦8-达梦数据的示例用户和表

1、示例库说明&#xff1a; 创建达梦数据的示例用户和表&#xff0c;导入测试数据。 在完成达梦数据库的安装之后&#xff0c;在/opt/dmdbms/samples/instance_script目录下有用于创建示例用户的SQL文件。samples目录前的路径根据实际安装情况进行修改&#xff0c;本文将达梦…

认识javascript中的模块化

什么是模块化&#xff1f; 将程序⽂件依据⼀定规则拆分成多个文件&#xff0c;拆分出来每个⽂件就是⼀个模块&#xff0c;模块中的数据都是私有的&#xff0c;模块之间互相隔离。如果不进行隔离&#xff0c;可能会造成模块间的变量定义有冲突&#xff0c;导致程序崩溃 为啥要使…

EasyExcel 动态设置表格的背景颜色和排列

项目中使用EasyExcel把数据以excel格式导出&#xff0c;其中设置某一行、某一列单元格的背景颜色、排列方式十分常用&#xff0c;记录下来方便以后查阅。 1. 导入maven依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easy…

AccessClient在苹果电脑闪退,解决方法

AccessClient 2 年前突然闪退了&#xff0c;一直没管&#xff0c;最近弄一个 electron打包&#xff0c;一直提示找不到 python&#xff0c;解决了 python 解释器后&#xff0c;顺手把AccessClient闪退解决了&#xff0c;解决思路如下&#xff1a; 1.在AccessClient点击鼠标右…

NVM:安装配置使用(详细教程)

文章目录 一、简介二、安装 nvm三、配置 nvm 镜像四、配置环境变量五、使用教程5.1 常用命令5.2 具体案例 六、结语 一、简介 在实际的开发和学习中可能会遇到不同项目的 node 版本不同&#xff0c;而出现的兼容性问题。 而 nvm 就可以很好的解决这个问题&#xff0c;它可以在…