某名校考研自命题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.mzph.cn/diannao/64322.shtml

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

相关文章

【网络】传输层协议UDP/TCP网络层IP数据链路层MACNAT详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;计算机网络原理_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.传输层协议 UDP 1.1 传输层 1.2 端口号 1.3 UDP 协议 1.3.1 UDP 协议端格式 1.3.2 UDP 的特点 1.3.3 面向数据报 1…

Python与数据库Mysql连接及操作方法

Python与数据库Mysql连接及操作方法 目录 Python与数据库Mysql连接及操作方法配置pip连接使用IP地址连接配置后使用机名连接 执行操作 配置pip 连接需要第三方库—pymysql pip install mysql连接 使用IP地址连接 格式&#xff1a; pymysql.connect( user ’ 用户名root’ …

C语言进阶(2) ---- 指针的进阶

前言&#xff1a;指针的主题&#xff0c;我们在初阶的《指针》章节已经接触过了&#xff0c;我们知道了指针的概念&#xff1a; 1.指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识一块内存空间。 2.指针的大小是固定的4/8个字节(32位平台/64位平台)。 3.指针是…

Web JavaScript Encrypt

Web JavaScript Encrypt 客户端加密解密

#代码实践 Springboot3.4.0 热部署

一、环境 Spring3.4.0 idea2024.3.1 二、热部署配置 1、pom.xml增加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency> …

基于 mzt-biz-log 实现接口调用日志记录

&#x1f3af;导读&#xff1a;mzt-biz-log 是一个用于记录操作日志的通用组件&#xff0c;旨在追踪系统中“谁”在“何时”对“何事”执行了“何种操作”。该组件通过简单的注解配置&#xff0c;如 LogRecord&#xff0c;即可实现接口调用的日志记录&#xff0c;支持成功与失败…

DateRangePickerDialog组件的用法

文章目录 概念介绍使用方法示例代码我们在上一章回中介绍了DatePickerDialog Widget相关的内容,本章回中将介绍DateRangePickerDialog Widget.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的DateRangePickerDialog是一种弹出窗口,只不过窗口的内容固定显示为…

JAVA企业级项目的日志记录技术

记录日志的作用 常用的日志框架 记录日志的准备工作 配置文件详解 日志级别

程序设计考题汇总(四:SQL练习)

文章目录 查询结果限制返回行数 查询结果限制返回行数 select device_id from user_profile LIMIT 2;

C++对象数组对象指针对象指针数组

一、对象数组 对象数组中的每一个元素都是同类的对象&#xff1b; 例1 对象数组成员的初始化 #include<iostream> using namespace std;class Student { public:Student( ){ };Student(int n,string nam,char s):num(n),name(nam),sex(s){};void display(){cout<&l…

时钟分频模块

实现时钟的二分频&#xff0c;四分频 1.时钟分频模块&#xff1a; module clk_div(input clk, //50Mhzinput rst_n,input [15:0] lcd_id,output reg lcd_pclk);reg clk_25m; reg clk_12_5m; reg …

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

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

Vscode搭建C语言多文件开发环境

一、文章内容简介 本文介绍了 “Vscode搭建C语言多文件开发环境”需要用到的软件&#xff0c;以及vscode必备插件&#xff0c;最后多文件编译时tasks.json文件和launch.json文件的配置。即目录顺序。由于内容较多&#xff0c;建议大家在阅读时使用电脑阅读&#xff0c;按照目录…

系统思考—持续修炼

昨天每周一下午的学习实验室&#xff0c;大家聊到“知行合一”&#xff0c;不禁感慨&#xff1a;人生其实就是一场修炼。就像我们分享的《第五项修炼》和《系统思考》的方法论&#xff0c;不仅仅是传授给他人&#xff0c;更是我们自己持续在实践的过程。 上周&#xff0c;庄老…

Android Studio、JDK、AGP、Gradle、kotlin-gradle-plugin 兼容性问题

文章目录 问题&#xff1a;解决办法&#xff1a;gradle与 java的版本兼容AGP与Gradle的版本兼容kotlin 与 jvm 的版本兼容KGP、Gradle、AGP兼容关系kotlin 与 java 的编译版本配置 问题&#xff1a; 你从githb上clone了一个项目&#xff0c;本地跑的时候&#xff0c;各种报错。…

Linux文件属性 --- 七种文件类型---文件.目录、软硬链接、字符设备文件

目录 七种文件类型 1、普通文件和目录 2、链接文件 2.1硬链接 2.2软链接 3、字符设备文件 一、七种文件类型 Linux的文件属性中一共有以下七种类型 &#xff1a; 符号类型含义解释-普通文件纯文本文件&#xff08;ASCII&#xff09;和二进制文件&#xff08;binary&#xff…

【WPF】把DockPanel的内容生成图像

要在WPF中将一个 DockPanel 的内容生成为图像并保存&#xff0c;可以按照与之前类似的步骤进行&#xff0c;但这次我们将专注于 DockPanel 控件而不是整个窗口。 DockPanel的使用 WPF&#xff08;Windows Presentation Foundation&#xff09;中的 DockPanel 是一种布局控件&…

Linux DNS 协议概述

1. DNS 概述 互联网中&#xff0c;一台计算机与其他计算机通信时&#xff0c;通过 IP 地址唯一的标志自己。此时的 IP 地址就类似于我们日常生活中的电话号码。但是&#xff0c;这种纯数字的标识是比较难记忆的&#xff0c;而且数量也比较庞大。例如&#xff0c;每个 IPv4 地址…

cursor的composer功能

1、对project概括 这个项目是关于什么&#xff1f; what is this project about? 网友表示&#xff1a;「带有 Cursor Agent 的 Cursor 0.43.3 太疯狂了。」

C++中类和对象的细节原理

文章目录 一、C中的构造函数二、C中的析构函数三、两者的配合与注意事项四、C中的静态成员变量五、C中的静态成员函数六、C中普通成员函数和静态成员函数的区别七、C中的const成员变量八、C中的const 成员函数九、C中构造函数的初始化列表十、C中的浅拷贝操作十一、C中的深拷贝…