考研复试机试 | C++ | 尽量不要用python,很多学校不支持

news2024/9/27 15:33:20

目录

  • 1.1打印日期 (清华大学上机题)
    • 题目:
    • 代码:
  • 1.2改一改:上一题反过来
    • 问题
    • 代码:
  • 2.Day of Week (上交&&清华机试题)
    • 题目:
    • 代码:
  • 3.剩下的树(清华机试)
    • 题目:
    • 代码:
  • 4.手机键盘
    • 题目:
    • 代码:

1.1打印日期 (清华大学上机题)

题目:

给出年分m和一年中的第n天,算出第n天是几月几号。

输入描述:
输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。

输出描述:
可能有多组测试数据,对于每组数据,
按 yyyy-mm-dd的格式将输入中对应的日期打印出来。

示例1
输入:
2000 3
2000 31
2000 40
2000 60
2000 61
2001 60
输出:
2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01

代码:

#include <cstdio>

using namespace std;

int main(){
	int year,n;
	//                 1  2  3  4  5  6  7  8 9 10 11 12
	int mday[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
	while(scanf("%d%d",&year,&n) != EOF){
		int mon = 1;
		int day = 1;
		for (int i=1;i<n;i++){
			// 是否使闰年 
			bool isRun = year%400==0 || year % 100!=0 && year%4==0;
			// 如果使闰年,2月置为29天 
			if (isRun){
				mday[2] = 29;
			}
			
			// nextday
			day++;
			// 如果天数累加到超过当月,重置天数计时,mon+=1 
			if(day>mday[mon]){
				mon++;
				day=1;
				// 如果mon累加超过12个月 
				if(mon>12){
					mon = 1;
					year++;
				} 
			}	
		}
		printf("%04d-%02d-%02d\n",year,mon,day); 
	}
} 

在这里插入图片描述
提交网址:
https://www.nowcoder.com/questionTerminal/b1f7a77416194fd3abd63737cdfcf82b

1.2改一改:上一题反过来

问题

在这里插入图片描述

代码:

#include <cstdio>

using namespace std;

int main(){
	int year,mon,day;
	//                 1  2  3  4  5  6  7  8 9 10 11 12
	int mday[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
	while(scanf("%d %d %d",&year,&mon,&day)!=EOF){
		int count=0;
		// 判断是否是闰年 
		bool isRun = year%400==0 || year % 100!=0 && year%4==0;
		if(isRun) mday[2]=29;
		
		int i;
		// 将前mon个月的天数相加 
		for(i=1;i<mon;i++){
			count += mday[i];
		}
		// 将后一个月的天数加进去 
		count += day;
		printf("%d",count); 
		
	}
} 

2.Day of Week (上交&&清华机试题)

题目:

描述
We now use the Gregorian style of dating in Russia. The leap years are years with number divisible by 4 but not divisible by 100, or divisible by 400. For example, years 2004, 2180 and 2400 are leap. Years 2005, 2181 and 2300 are not leap. Your task is to write a program which will compute the day of week corresponding to a given date in the nearest past or in the future using today’s agreement about dating.
(简单来说就是,给你一个日期,让你判断这是本周的第几天)

输入描述:
There is one single line contains the day number d, month name M and year number y(1000≤y≤3000). The month name is the corresponding English name starting from the capital letter.
输出描述:
Output a single line with the English name of the day of week corresponding to the date, starting from the capital letter. All other letters must be in lower case. Month and Week name in Input/Output: January, February, March, April, May, June, July, August, September, October, November, December Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday

直接看示例就好

示例1
输入
9 October 2001
14 October 2001
输出
Tuesday
Sunday

代码:

王道风格

#include <cstdio>
#include <string> 
#include <map> 

using namespace std;

// 涉及字符串时,输入输出使用C风格的字符串,中间过程使用C++的字符串 
int main(){
	// 字符串月份到int的map 
	map<string,int> monthToInt = {
		{"January",1}, 
		{"February",2}, 
		{"March",3}, 
		{"April",4}, 
		{"May",5}, 
		{"June",6}, 
		{"July",7}, 
		{"August",8}, 
		{"September",9}, 
		{"October",10}, 
		{"November",11}, 
		{"December",12}
	};
	
	string intToWeekday[7] = {"Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
	
	int mday[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
		
	int year,day,mon;
	char str[100];
	string month;
	
	bool isBefore;
	// 9 October 2001
	// 字符串的输入不需要加& 
	while(scanf("%d%s%d",&day,str,&year)!=EOF) {
		
		month = str; //把字符串从C风格转换为C++风格
		// month.c_str()  字符串从C++风格转换为C风格 
		mon = monthToInt[month];
		// 写这个代码时  时2023年2月15日 
		if(year<2023 || year==2023&&mon<2 || year==2023&&mon==2&&day<15){
			isBefore=true;
		}
		else{
			isBefore=false;
		}
		
		//确定起点和终点 
		int begYear,begMon,begDay,endYear,endMon,endDay;
		if(isBefore){
			begYear = year;
			begMon=mon;
			begDay = day;
			endYear = 2023;
			endMon=2;
			endDay=17;
		}
		else{
			begYear = 2023;
			begMon=2;
			begDay = 17;
			endYear = year;
			endMon=mon;
			endDay= day;
		}
		int totalDay = 0;
		while(true){
			if(begYear==endYear&&begMon==endMon&&begDay==endDay) break;
			totalDay++;
			
			bool isRun = begYear%400==0 || begYear % 100!=0 && begYear%4==0;
			if(isRun) {
				mday[2]=29;
			}
			else 
			{
				mday[2]=28;
			}
			begDay++;
			if(begDay>mday[begMon]){
				begDay = 1;
				begMon++;
				if(begMon>12){
					begMon = 1;
					begYear++;
				}
			}
		}
		if(isBefore){
			// (x+totalDay)%7 = 5  --> x = (12-totalDay%7)%7 
			printf("%s\n",intToWeekday[(12-totalDay%7)%7].c_str());
		}
		else{
			// 2023年2月17日是星期5 
			printf("%s\n",intToWeekday[(totalDay+5)%7].c_str());
		}
	}
} 

在这里插入图片描述

3.剩下的树(清华机试)

题目:

有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,…,L共L+1个位置上有L+1棵树。 现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。 可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。

输入描述:
两个整数L(1<=L<=10000)和M(1<=M<=100)。 接下来有M组整数,每组有一对数字。

输出描述:
可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。

示例:
输入:
500 3
100 200
150 300
输出:
470 471

代码:

#include <cstdio>

int main(){
	int tree[10001];  // 1表示有树,0表示没树 
	int L,M;
	scanf("%d%d",&L,&M);
	//L+1颗树 --> 0到L
	for(int i=0;i<=L;i++){
		tree[i] = 1;
	} 
	
	for(int idx=0;idx<M;idx++){
		int left,right;
		scanf("%d%d",&left,&right);
		for(int i =left;i<=right;i++){
			tree[i] = 0;
		} 
	}
	int total = 0;
	for (int i=0;i<=L;i++){
		if (tree[i]==1)
		total++;
	}
	printf("%d\n",total);
}

4.手机键盘

题目:

按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。
一、如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按2下,kz需要按6下
二、如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按c。 现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。 现在给出一串字符,需要计算出它所需要花费的时间。

输入描述:
一个长度不大于100的字符串,其中只有手机按键上有的小写字母
输出描述:
输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间

示例:
输入:
bob
www
输出:
7
7

代码:

#include<cstdio>
#include<map>
using namespace std;
int main(){
	//各个字母属于哪个按键
    map<char,int> position={
            {'a',2},{'b',2},{'c',2},
            {'d',3},{'e',3},{'f',3},
            {'g',4},{'h',4},{'i',4},
            {'j',5},{'k',5},{'l',5},
            {'m',6},{'n',6},{'o',6},
            {'p',7},{'q',7},{'r',7},{'s',7},
            {'t',8},{'u',8},{'v',8},
            {'w',9},{'x',9},{'y',9},{'z',9}
    };
    //输入某一个字母需要多长时间
    map<char,int> input_time={
            {'a',1},{'b',2},{'c',3},
            {'d',1},{'e',2},{'f',3},
            {'g',1},{'h',2},{'i',3},
            {'j',1},{'k',2},{'l',3},
            {'m',1},{'n',2},{'o',3},
            {'p',1},{'q',2},{'r',3},{'s',4},
            {'t',1},{'u',2},{'v',3},
            {'w',1},{'x',2},{'y',3},{'z',4}
    };
    // 题目中说明字符串长度不超过100 
    char str[101];
    while(scanf("%s",str)!=EOF){
    	//input_last是上次按下的按键。初始时,将input_last置为与其他所有按键都不同的值
        int input_last=1;
        //输入一个字符串需要的总时间
        int total_time=0;
        // C风格的字符串以 '\0' 结束 
        for(int i=0;str[i]!='\0';++i){
        	//如果本次即将要输入的字母的按键 与上个字母所在按键相同
            // str[i]是本次要输入的字符, position[str[i]]是本次要按下的数字键 
			if(position[str[i]]==input_last){
                total_time=total_time+2; // 相同则需要等待2个时间段 
            }
            
            // 按出这个字母所需的时间 
            total_time=total_time+input_time[str[i]];
            
            // 记录本次按下的数字 
            input_last=position[str[i]];
        }
        printf("%d\n",total_time);
    }
}


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

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

相关文章

sni第三种模式复现、幽灵猫网络抓包方式复现、所有漏洞复现

sni第三种模式复现 搭建环境 [rootlocalhost nginx]# mkdir certificate [rootlocalhost nginx]# cd certificate/[rootlocalhost certificate]# openssl genrsa -des3 -out ssl.key 4096 [rootlocalhost certificate]# openssl req -new -key ssl.key -out aaa.csr [rootlo…

Django框架之模型视图-URLconf

URLconf 浏览者通过在浏览器的地址栏中输入网址请求网站对于Django开发的网站&#xff0c;由哪一个视图进行处理请求&#xff0c;是由url匹配找到的 配置URLconf 1.settings.py中 指定url配置 ROOT_URLCONF 项目.urls2.项目中urls.py 匹配成功后&#xff0c;包含到应用的urls…

ChatGPT时代,别再折腾孩子了

今天这篇完全是从两件事儿有感而发。昨天在文印店&#xff0c;在复印机上看到装订好的几页纸&#xff0c;我瞥了一眼&#xff0c;是历史知识点&#xff1a;隋朝大运河分为四段&#xff0c;分别是___ ___ ___ ___&#xff0c;连接了五大河___ ___ ___ ___ ______ 年&#xff…

开源云真机平台——Sonic应用实践

前言 Sonic是一款开源、支持分布式部署、在线自动化测试的私有云真机平台。想着写一篇总结分享。 一、云真机平台 1.云真机平台对比 目前市面上常见的云真机平台有两种&#xff0c;一种是各大服务商如阿里、腾讯、百度推出的公共云真机平台&#xff0c;如&#xff1a;WeTes…

2月18日绿健简报,星期六,农历正月廿八

2月18日绿健简报&#xff0c;星期六&#xff0c;农历正月廿八坚持阅读&#xff0c;静待花开1. 中国证监会发布全面实行股票发行注册制相关制度规则&#xff0c;即日起施行。2. 返回地面75天后神舟十四号乘组航天员首次与媒体和公众正式见面。3. 银保监会查处5家金融机构违法违规…

C语言结构体复习总结

目录 一、结构体引入 1.1 为什么要用结构体&#xff1a; 1.2 定义一个结构体&#xff1a; 1.3 结构体在声明的时候不要定义变量&#xff1a; 1.4 根据业务需求定义不同的结构体&#xff1a; 二、定义结构体和使用变量 2.1 最好不要在声明结构体时定义变量&#xff1a; …

找工作必看,用Python爬取数据分析岗位信息并可视化分析

导读&#xff1a; 最近经常收到人事小姐姐和猎头小哥哥的面试邀请&#xff0c;想想最近也不是招聘旺季呀。但又想到许多小伙伴们有找工作这方面的需求&#xff0c;今天就来分享一篇简单的爬虫案例&#xff0c;旨在跟大家一起分析一下部分招聘市场。以"数据分析"为例。…

Linux之Xshell工具使用

shell简介Xshell是一个远程工具&#xff0c;可以远程连接linux系统 &#xff0c;SSH&#xff0c;远程管理 Xshell来远程访问Linux系统的终端 。shell的英文含义是“壳”&#xff1b;它是相对于内核来说的&#xff0c;因为它是建立在内核的基础上&#xff0c;面向于用户的一种表…

Eclipse下Maven的集成

Eclipse下Maven的集成 2.1指定本地maven环境 参考&#xff1a;Eclipse的Maven创建_叶书文的博客-CSDN博客_eclipse创建maven项目 指定用本地maven指定maven仓库设置和地址2.2创建maven项目 1.新建 2.目录设置 3.坐标设置&#xff08;随便写就行&#xff09; 4.目录结构 2.3配置…

事件驱动型架构

事件驱动型架构是一种软件设计模式&#xff0c;其中微服务会对状态变化&#xff08;称为“事件”&#xff09;作出反应。事件可以携带状态&#xff08;例如商品价格或收货地址&#xff09;&#xff0c;或者事件也可以是标识符&#xff08;例如&#xff0c;订单送达或发货通知&a…

【看表情包学Linux】进程地址空间 | 区域和页表 | 虚拟地址空间 | 初识写时拷贝

&#x1f923; 爆笑教程 &#x1f449; 《看表情包学Linux》&#x1f448; 猛戳订阅 &#x1f525; &#x1f4ad; 写在前面&#xff1a;本章核心主题为 "进程地址空间"&#xff0c;会通过验证 Linux 进程的地址空间来开头&#xff0c;抛出 "同一个值能有不同内…

【IOS逆向】dumpdecrypted砸壳

【IOS逆向】dumpdecrypted砸壳 前面简单尝试了下frida-trace,发现可以追踪对应pid动态运行时的各种函数&#xff0c;但是对于一个完整APP应用&#xff0c;我们如何得到关键的运行函数&#xff0c;这里就需要对IPA进行一个逆向拆解&#xff0c;找代码逻辑&#xff0c;然后结合f…

idea同时编辑多行-winmac都支持

1背景介绍 idea编辑器非常强大&#xff0c;其中一个功能非常优秀&#xff0c;很多程序员也非常喜欢用。这个功能能够大大大提高工作效率-------------多行代码同时编辑 2win 2.1方法1 按住alt鼠标左键上/下拖动即可 这样选中多行后&#xff0c;可以直接多行编辑。 优点&a…

C++ STL 学习之【string】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f38a;每篇一句&#xff1a; 图片来源 The key is to keep company only with people who uplift you, whose presence calls forth your best. 关键是只与那些提升你的人在一起&#xff0c…

前端开发常用案例(二)

这里写目录标题1.loding加载动画2.全屏加载动画效果3.吃豆豆4.鼠标悬停3D翻转效果5.3D旋转木马效果6.flex弹性布局-酷狗音乐播放列表flex弹性布局-今日头条首页热门视频栏grid网格布局-360图片展示小米商城左侧二级菜单1.loding加载动画 代码如下&#xff1a; <!DOCTYPE h…

干货 | PCB电路板短路了!试试这六种检查方法

首先&#xff0c;了解一下常见的电路板短路的种类&#xff1a;短路按照功能性可分为&#xff1a;焊接短路&#xff08;如&#xff1a;连锡&#xff09;、PCB短路&#xff08;如&#xff1a;残铜、孔偏等&#xff09;、器件短路、组装短路、ESD/EOS击穿、电路板内层微短路、电化…

九龙证券|房企纷纷驶入代建赛道 抢占千亿新蓝海

跟着房地产职业进入深度调整期&#xff0c;代建形式日益受到房企青睐&#xff0c;不少房企纷繁入局或加快布局&#xff0c;成为了近期商场关注的焦点。 2月11日&#xff0c;上坤集团宣告将布局共建办理事务&#xff0c;这也意味着其正式入局代建商场。实际上&#xff0c;上一年…

谷歌seo快排技术怎么做?Google排名霸屏推广原理

本文主要分享关于谷歌快速排名的方法和所需要的条件。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 首先提出一个问题&#xff1a;谷歌seo快排技术怎么做&#xff1f;如何达到谷歌霸屏的效果&#xff1f; 答案是&#xff1a;利用谷…

Java 基础面试题——常见类

目录1.String 为什么是不可变的&#xff1f;2.字符串拼接用“” 和 StringBuilder 有什么区别?3.String、StringBuffer 和 StringBuilder 的区别是什么?4.String 中的 equals() 和 Object 中的 equals() 有何区别&#xff1f;5.Object 类有哪些常用的方法&#xff1f;6.如何获…

【C语言进阶】你听说过柔性数组吗?

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;C语言航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&a…