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

本帖更新一些某校的编程真题,总体来说不难,考察的都是基本功,92高校大一期末的难度,不过有些细节颇为繁琐,各位还是需要一定程度上注意的~


目录

一.分数求和

二.大小写字母转换

三.判断当年天序

四.交替合并字符串

五.指针形态的冒泡排序

六.递归方式的倒序输出

七.黑色星期五

八.卡布列克运算

九.只出现一次的字符

十.产生0-1的随机数

一.分数求和

#include <iostream>
using namespace std; 
int main(int argc, char** argv) {
	
	int n=0;
	cin>>n;
	
	double answer=0.000;
	for(int i=1;i<=n;i++)
	{
		if(i%2!=0)
			answer+=(1.0/i);
		else
			answer-=(1.0/i);
	}
	cout<<answer<<endl;
	return 0;
}

过于简单,唯一需要注意的地方是需要用1.0除以第n项的值,如果用1除永远是1,因为整数除不尽!

二.大小写字母转换

复习两个知识点:

1.ASCII码你好意思还没背会? 小写字母反而大,大小相差32,大写A为65,小写a为97——一定要记清楚!

2.在初试考文件已经过时了,要是觉得不保险把这篇帖子的内容掌握即可:一篇入门C语言【文件】-CSDN博客文章浏览阅读609次,点赞3次,收藏6次。本科期间C语言的课本无论哪个版本都会有【文件】这一章节,不过好多学校基本上不讲或者就出一道选择题,讲得很浅,今天这篇详细总结一下这部分的知识~https://blog.csdn.net/jsl123x/article/details/141827614?spm=1001.2014.3001.5501

#include <iostream>
#include <string>
using namespace std; 
int main(int argc, char** argv) {
	string s;
	cin>>s;
	
	for(int i=0;i<=s.size()-1;i++)
		if(s[i]>=97&&s[i]<=122)
			s[i]-=32;
	cout<<"大写形态为:"<<s<<endl;
	
	FILE* p;
	p=fopen("./text.txt","r+");
	for(int i=0;i<=s.size()-1;i++)
		fputc(s[i],p);
	fclose(p);
	 
}

结果没什么问题:

这里博主用的是r+,也即十进制的读写,实际上也可以用a+也即二进制的读写,大家看题目要求~ 

三.判断当年天序

输入格式为2024 12 09,然后判断这是今年的第几天,很简单,只需要用一个类似哈希表的数组存储每个月的天数即可,如果是闰年可能会要多一天。

#include <iostream>
#include <string>
using namespace std; 

struct Date{
	int year;
	int month;
	int day;
};

int main(int argc, char** argv) {
	int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	
	int answer=0;
	Date date;
	cin>>date.year>>date.month>>date.day;
	
	if((date.year%400==0)||(date.year%100!=0&&date.year%4==0))  //闰年!
		days[1]++;//二月要多一天,别搞混数组下标
	
	for(int i=0;i<=date.month-2;i++)
		answer+=days[i];
	answer+=date.day;
	cout<<"这是"<<date.year<<"的第"<<answer<<"天~"<<endl; 

}

几点说明:

  • 博主用的结构体,其实写完以后觉得有点多余。。。直接定义变量就行了,大家没必要学我
  • days存放每个月不是闰年的天数
  • 然后单独判断是否为闰年——可以整除400亦或整除4的同时不能整除100——如果是闰年2月要加一天
  • 注意数组的下表,你要是晕,就直接把0位空出来从一开始赋值
  • 最后加上当月天数即可~

测试后没什么问题~

四.交替合并字符串

 唉,写得我都觉得乏味,但是做事一定要有头有尾哈哈~

#include <iostream>
#include <string>
using namespace std; 

int main(int argc, char** argv) {
	string A,B;
	cin>>A;
	cin>>B;
	

	int i=0,j=0; 
	string target;
	while(i<=A.size()-1&&j<=B.size()-1)
	{
		target+=A[i++];
		target+=B[j++];
	}
	while(i<=A.size())  target+=A[i++];
	while(j<=B.size())  target+=B[j++];
	cout<<target<<endl; 
	
	FILE* p;
	p=fopen("./text.txt","r+");
	for(int i=0;i<=target.size()-1;i++)
		fputc(target[i],p);
	fclose(p);
	
}
  • 本质上就是用两个指针分别扫描两个字符串——各位一定要注意这种操作:在双指针类的题目,亦或什么n复杂度内实现字符串的逆转,经常会这么写。
  • 此外就是扫描长度——这里是直到扫描完一个才单独扫描另一个,其实就是归并排序经典的写法。里面的【i++】各位一定要理清楚,这是先操作,再自增~ 

测试一下也没什么问题~

五.指针形态的冒泡排序

该说不说,有点“装神弄鬼”,姑且理解为他想考察指针数组吧。。。代码如下:

#include <iostream>
#include <string>
using namespace std; 

void BubbleSort(char* arr[],int length)
{
	for(int i=0;i<=length-1;i++)//忽略最后一位
		for(int j=i+1;j<=length;j++)
			if((*arr[i])>(*arr[j]))
			{
				char* temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp;
			}
} 

注意,上面传进来的是一个存储了元素地址的指针数组,而并非元素的值,因此:

  • 我们在比较大小时,应该对指针进行解引用,不然比较的是地址的大小
  • 但在交换的时候,只需要交换元素的地址即可~ 
  • 此外,最外层循环可以少对比一位,这时冒泡的基本功了,别糊涂
int main(int argc, char** argv) {
	string target;
	cin>>target;
	char* arr[target.size()-1];
	for(int i=0;i<=target.size()-1;i++)
		arr[i]=&target[i];
		
	cout<<"排序前:";	
	for(int i=0;i<=target.size()-1;i++)
		cout<<(*arr[i])<<" "; 
		
	cout<<endl;	
	BubbleSort(arr,target.size()-1);
	
	cout<<"排序后:";
	for(int i=0;i<=target.size()-1;i++)
		cout<<(*arr[i])<<" "; 
	return 0;
}

主函数测试一下。

没什么毛病~

六.递归方式的倒序输出

虽然递归的时间复杂度很高,实践中肯定不这样写,但是作为思维的练习值得关注~ 

#include<iostream>
using namespace std;
 
void MyReverse(char* string)
{
	if (*string != '\0')
	    MyReverse(string + 1);	
	printf("%c", *string);
}

int main()
{
	char arr[1000];
	cin>>arr;
	MyReverse(arr);
	return 0;
}

如果当前不为【\0】,就一直向后递归,直到为\0后再递归输出前面的字母,以此实现逆序~ 

这里就不输出到文件中了,和前面同理~ 

七.黑色星期五

没什么技术含量,就是编起来细节比较多,这种题只要能读懂题干,考出来不怕他~~

#include <iostream> 
using namespace std;
int main(){
	int n=0,num=1;            //1900.1.1是星期一因此,这个一般在题干会给出~ 
	cin>>n;          
	int year=1900,month,day=0;//从1900年开始向后遍历 
	int count[7]={0};
	int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	
	for(int i=0;i<n;i++,year++){
		if((year%4==0&&year%100!=0)||year%400==0)
			mon[2]=29;
		for(month=1;month<13;month++)
			for(day=1;day<=mon[month];day++){
				if(day==13)
					count[num]+=1;
				num=(num+1)%7;
			}
		mon[2]=28;
	}
	cout<<count[6]<<endl;
	for(int i=0;i<5;i++)
    	cout<<count[i]<<" ";
   	cout<<count[5]<<endl;
	return 0;
}

八.卡布列克运算

还是和黑色星期五一样,没有任何思维上的难度,只是操作的技巧问题:

#include <iostream> 
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;

int main(){
	int n=0;
	cin>>n;
	vector<int>V;
	int max=0,min=0;
	int temp=0;
	while(n)
	{
		temp=n%10;
		n/=10;
		V.push_back(temp);
	}
	sort(V.begin(),V.end());  //排序后为从小到大 
	for(int i=3;i>=0;i--){
		min+=V[3-i]*pow(10,i);
		max+=V[i]*pow(10,i);	
	}
	cout<<max-min<<endl;
}

博主还是用了大量的STL标准库,各位想自己写一些底层操作也可以,博主就浅浅偷懒一下了~

测试如下,没问题:

九.只出现一次的字符

简单,博主的思维是可以使用结构体类型的哈希表,这样只需要遍历一次即可出结果——因为这里限制为英文字母,哈希表长度为26,遍历哈希表在N很大的情况下可以看为常数级别。还有一点要复习,字符串的0和大小字母A的差值为65,大家一定要记清楚,这一点可以有效帮助我们构造散列函数,也即如下这一段:

	for(int i=0;i<=target.size()-1;i++)
	{
		int temp=0;	
		temp=target[i]-65;
		hash[temp].count++;
		if(hash[temp].first==-2)
			hash[temp].first=i;
	}

不过非常遗憾,可能是电脑的问题,博主写的代码出现了找不到的bug——即遍历哈希表会出现意想不到的情况,只能把哈希表冒泡排序了一遍。。。其实大家可以试试找出哈希表中first最小的值即可,复杂度为n。这段加了冒泡的是n方,也还行吧。。。

#include <iostream> 
#include <string>
using namespace std;

struct Hash{
	int count;
	int first;
	char tag;
};

int main(){
	string target;
	cin>>target;
	
	Hash hash[26];
	for(int i=0;i<=25;i++)
	{
		hash[i].count=0;
		hash[i].first=-2;
		hash[i].tag='A'+i;
	}
		
	for(int i=0;i<=target.size()-1;i++)
	{
		int temp=0;	
		temp=target[i]-65;
		hash[temp].count++;
		if(hash[temp].first==-2)
			hash[temp].first=i;
	}	
	
	for(int i=0;i<=24;i++)
		for(int j=i+1;j<=25;j++)
			if(hash[i].first>=hash[j].first)
			{
				Hash temp;
				temp=hash[i];
				hash[i]=hash[j];
				hash[j]=temp;
			}
			
	for(int i=0;i<=25;i++)
		if(hash[i].count==1)
		{
			cout<<"第一个只出现一次的字母是:"<<hash[i].tag<<endl;
			break;
		}
	return 0;
}

测试一下,没什么bug:

十.产生0-1的随机数

非常冷门,了解一下即可:

#include <iostream>
#include <cstdlib> 
using namespace std;
int main(int argc, char** argv) {
	for(int i=1;i<=10;i++) 
	{
		double num=0;
		num=(double)rand()/100000;
		cout<<num<<endl; 
	}
	return 0;
}

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

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

相关文章

滑动窗口算法专题

滑动窗口简介 滑动窗口就是利用单调性&#xff0c;配合同向双指针来优化暴力枚举的一种算法。 该算法主要有四个步骤 1. 先进进窗口 2. 判断条件&#xff0c;后续根据条件来判断是出窗口还是进窗口 3. 出窗口 4.更新结果&#xff0c;更新结果这个步骤是不确定的&#xff0c…

Prime2_解法二:openssl解密凭据

Prime2_解法二&#xff1a;openssl解密凭据 本博客提供的所有信息仅供学习和研究目的&#xff0c;旨在提高读者的网络安全意识和技术能力。请在合法合规的前提下使用本文中提供的任何技术、方法或工具。如果您选择使用本博客中的任何信息进行非法活动&#xff0c;您将独自承担全…

R语言的数据结构-向量

【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言编程_夏天又到了的博客-CSDN博客 在R语言中&#xff0c;数据结构是非常关键的部分&#xff0c;它提…

SpringBoot使用Nacos进行application.yml配置管理

Nacos是阿里巴巴开源的一个微服务配置管理和服务发现的解决方案。它提供了动态服务发现、配置管理和 服务管理平台。Nacos的核心功能包括服务发现、配置管理和动态服务管理&#xff0c;使得微服务架构下的服务治理 变得简单高效。 Nacos的设计基于服务注册与发现、配置管理、动…

【Java学习笔记】Collections 工具类

一、基本介绍 Collections 是一个操作 Set、List 和 Map 等集合的工具类Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作 二、排序操作&#xff1a;&#xff08;均为 static 方法) 三、查找、替换

【含开题报告+文档+PPT+源码】基于ssm框架的购物交流圈交流及市场服务平台

开题报告 随着互联网技术的迅猛发展&#xff0c;社交网络和电子商务已成为人们日常生活中不可或缺的一部分。特别是在移动互联网的普及下&#xff0c;人们越来越倾向于通过在线平台进行交流、分享和购物。这种趋势为基于 SSM&#xff08;Spring、SpringMVC、MyBatis&#xff0…

Datawhale AI 冬令营(第一期)定制你的第一个专属模型-学习笔记

最近我报名参加了Datawhale组织的主题为“动手学系列&#xff0c;人人都能应用的AI”的Datawhale AI冬令营&#xff08;第一期&#xff09;。 本次学习一共12天&#xff0c;从12月10日-12月21日&#xff0c;学习会包含【跑通速通手册】&#xff0c;【学习大模型微调&数据集…

GS-SLAM论文阅读--RGBDS-SLAM

前言 最近GS-SLAM领域的工作层出不穷&#xff0c;有很多不错的工作出现。接下来慢慢写一下相关博客。 文章目录 前言1.背景介绍2.关键内容2.1 3D多层次金字塔高斯喷溅2.2 紧密耦合多特征重构优化2.3总体流程 3.文章贡献4.个人思考 1.背景介绍 高保真重建是密集SLAM的关键。最…

使用EventLog Analyzer进行Apache日志监控和日志分析

一、什么是Apache日志分析 Apache日志分析是网站管理和维护的重要部分&#xff0c;通过分析Apache服务器生成的日志文件&#xff0c;可以了解网站的访问情况、识别潜在的安全问题、优化网站性能等。 二、Apache日志类型 Apache日志主要有两种类型&#xff1a;访问日志&a…

[计算机网络]IP地址推行的“书同文,车同轨”

硬件地址无法直接转换的故事 在很久很久以前&#xff0c;网络世界就像一个庞大的帝国&#xff0c;各个村落&#xff08;网络&#xff09;都有自己的语言&#xff08;硬件地址&#xff09;。每个村落都有自己的规则和习惯&#xff0c;村里的每户人家&#xff08;设备&#xff0…

鸿蒙NEXT开发案例:九宫格随机

【引言】 在鸿蒙NEXT开发中&#xff0c;九宫格抽奖是一个常见且有趣的应用场景。通过九宫格抽奖&#xff0c;用户可以随机获得不同奖品&#xff0c;增加互动性和趣味性。本文将介绍如何使用鸿蒙开发框架实现九宫格抽奖功能&#xff0c;并通过代码解析展示实现细节。 【环境准…

idea 配置 git .gitignore文件配置

.gitignore 内容 .idea/ *.iml target/ *.class *.log .iml在idea项目里面创建一个.gitignore名字的文件&#xff0c;然后把这个文件提交到git上。我一般是放到.idea同级目录。 我遇到了几种情况这个文件配置了但是不生效的情况 第一种 Git的缓存可能会导致配置不生效。尝试…

H.323音视频协议

概述 H.323是国际电信联盟&#xff08;ITU&#xff09;的一个标准协议栈&#xff0c;该协议栈是一个有机的整体&#xff0c;根据功能可以将其分为四类协议&#xff0c;也就是说该协议从系统的总体框架&#xff08;H.323&#xff09;、视频编解码&#xff08;H.263&#xff09;、…

快速掌握Quartz.Net计划任务调度框架,轻松实现定时任务

前言 Quartz.Net是一个开源的作业调度框架&#xff0c;可以用于管理计划任务和定期执行。Quartz.Net提供了丰富的作业计划选项&#xff0c;例如精确或模糊时间表达式、日期和时间限制等。Quartz.Net采用分布式架构&#xff0c;允许在多个计算机上运行任务。 Quartz.Net架构设…

【开源大屏】玩转开源积木BI,从0到1设计一个大屏

积木 BI 重磅推出免费大屏设计器&#xff01;功能超强大&#xff0c;操作超流畅&#xff0c;体验超酷炫。快来体验一下吧。 让我们一起来看一下如何从0到1设计一个大屏。 一、积木BI大屏介绍 积木BI可视化数据大屏 是一站式数据可视化展示平台&#xff0c;旨在帮助用户快速通…

【JVM】JVM基础教程(四)

上一章&#xff1a;【JVM】JVM基础教程&#xff08;三&#xff09;-CSDN博客 目录 自动垃圾回收 方法区的回收 方法区回收条件 手动触发回收 堆回收 如何判断堆上的对象可以回收&#xff1f; 可以给对象引用赋值null&#xff0c;切断引用 引用计数法 循环引用缺点 查…

数据结构(Queue队列)

前言&#xff1a; 在计算机科学中&#xff0c;数据结构是构建高效算法和程序的基础&#xff0c;而队列&#xff08;Queue&#xff09;作为一种经典的线性数据结构&#xff0c;具有重要的地位。与栈&#xff08;Stack&#xff09;不同&#xff0c;队列遵循“先进先出”&#xf…

DevExpress WPF中文教程:Grid - 如何移动和调整列大小?(一)

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

语言模型(序列模型)

终于快要毕业了&#xff0c;乘着还在还在研究室&#xff0c;把最后一章sequence模型也学完吧。 Sequence Model 一&#xff1a;基础知识1&#xff1a;符号的定义2&#xff1a;词典(Vocabulary) 与编码(Encoding) 二&#xff1a;RNN(Recurrent Neural Networks) 循环神经网络1&…

MySQL(表的约束)

目录 1. 空属性(NULL) 2. 默认值(default) 3. 列描述(comment) 4. zerofill 5. 主键(primary_key) 6. 自增长(auto_increment) 7. 唯一键(uniqie) 8. 外键(foreign key (字段名) references 主表(列) 表的约束&#xff1a;表中有各种类型&#xff0c;每个类型插入的数据…