模拟问题刷题

模拟类题目是机试题中出现频率很高的一种类型,这类题目的特点是并不涉及特别高 深的知识,只需利用程序实现题目的要求。由于这类题目通常不需要经过太多的思考,所以能够很纯粹地考查考生的编程能力。

1. 图形排版

图形排版是最为常见的模拟类题型,这类题目要求考生按照特定规则输出字符,主要考查考生对输出格式的把握。通常来说这类题目的规律性比较强,掌握了题目中的规律,题目便能迎刃而解。

解法一:

思路:其实这类题目就是去例举几个特殊的例子,然后通过观察找出其中的规律

第一步:每一行字符的总数为h+(h-1)*2,得出这个式子

第二步:找出每一行*字符与高h和i之间的关系

第三步:利用总数减去每一行*字符的个数,就得出空格的个数

采用的方式是逐行进行输出的方式

#include<iostream>
using namespace std;
int main()
{int h = 0;while (cin >> h){for (int i = 0; i < h; i++)//一共h层{for (int j = 0; j < 2 * h - 2 * i - 2; j++){cout << " ";}//利用第一个for循环输出空格for (int j = 0; j < h + 2 * i; j++){cout << "*";}//利用第二个for循环输出*cout << endl;//每输出一行要输出一个换行符}}return 0;
}

运行结果:

解法二:(利用二维数组处理图案模拟问题)

思路:

step1:先申请足够大小的二维数组,放在全局变量的位置

step2:根据题目条件,从任意方向开始,设置二维数组的初始值,此题就是空格

step3:注意将二维数组的每一行的边界的最后一个位置使用\0赋值

step4:进行字符串的输出

#include<iostream>
using namespace std;char arr[1000][3000];//此处将arr数组定义在全局中,存放在静态区
int main()
{int h = 0;while (cin >> h){//step1:用空格填充每一个位置元素for (int i = 0; i < h; i++)//一共h层{for (int j = 0; j < 3 * h - 2; j++)//每一行的元素总数{arr[i][j] = ' ';//注意这个地方要用单引号,双引号表示的是字符串,char类型是用单引号}arr[i][3 * h - 2] = '\0';//二维数组的每一行结尾用\0标识结束}//step2:填上*号,从上到小找规律进行赋值for (int i = 0; i < h; i++){for (int j = 2 * h - 2 * i - 2; j < 3 * h - 2; j++)//这里j的初值需要列表进行找出规律{arr[i][j] = '*';}}//step3:输出每行结果for (int i = 0; i < h; i++){cout << arr[i];//这里的arr[i]表示的是一行的字符串cout << endl;//换行}}return 0;
}

题目2:叠筐__牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/questionTerminal/2d6505bf0d38479c9bff66e10fe39a5c

 思路:

 题解:

#include<iostream>
using namespace std;int main()
{char inner, outer;int n;char arr[80][80] = { 0 };//把每个位置元素初始化为字符0while (cin >> n >> inner >> outer){int length;//length表示每一层正方形边框的长度int x, y;//x,y表示坐标char curimage = inner;//表示此次需要赋值的图案for (length = 1, x = n / 2, y = n / 2; length <= n; length += 2, x--, y--){//起始时正方形长度为1,每一次边框长度增加2,当长度增加到n时结束//x,y分别为起始时的坐标,从最中间元素开始,沿着对角线从开始移动for (int i = x, j = y; i < x + length; i++)//先循环打印竖着的一列{//j表示列,j不变,i从x到x+length-1依次增加arr[i][j] = curimage;}for (int i = x, j = y; j < y + length; j++)//先循环打印横着的一行{//i表示行,i不变,j从y到y+length-1依次增加arr[i][j] = curimage;}for (int i = x, j = y + length - 1; i < x + length; i++){//j表示列,j不变,i从x到x+length-1依次增加arr[i][j] = curimage;}for (int i = x + length - 1, j = y; j < y + length; j++){//i表示行,i不变,j从y到y+length-1依次增加arr[i][j] = curimage;}//每一次打印完一个边框正方形需要更换图案if (curimage == inner){curimage = outer;}else{curimage = inner;}}//挖去四个角if (n != 1){arr[0][0] = ' ';arr[0][n - 1] = ' ';arr[n - 1][0] = ' ';arr[n - 1][n - 1] = ' ';}//输出for (int i = 0; i < n; i++){cout << arr[i] << endl;}//注意题目要求,叠框与叠框之间有一行间隔cout << endl;}return 0;
}

 通过此题,补充几个常见的OJ刷题过程中会遇到的错误:

 2.日期问题

日期类运算的各种问题同样被频繁地选入机试考题中,但这类问题通常都有规律可循。只要能够把握这类问题题面中的核心规律,求解这类问题就不会有太大的难度。

解决日期类问题之前,要有一个对于闰年的常识,闰年应该怎么判断:

1.当年份可以被4整除但不能被100整除时,

2.或者可以被400整除时,就是闰年。

题目一:今年的第几天?_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/ae7e58fe24b14d1386e13e7d70eaf04d?tpId=40&tqId=21350&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking

#include<iostream>
using namespace std;int main()
{int monthDay[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//将每月有多少天用一个数组存起来//这里有一个技巧,第一个位置多存了一个0,方便后面的月份可以直接对应到数组的下标int year, month, day;while (cin >> year >> month >> day){int count = 0;//计算是第几天//判断输入的年份是否是闰年if ((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0)){monthDay[2] = 29;//是闰年,二月份为28天}else{monthDay[2] = 28;}for (int i = 1; i < month; i++){count += monthDay[i];}//若是5月1号,那么累加出1到4月的总天数count += day;//最后再累加上day天数cout << count << endl;}return 0;
}

题目二:
打印日期_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/b1f7a77416194fd3abd63737cdfcf82b?tpId=69&tqId=29669&tPage=1&ru=/kaoyan/retest/11002&qru=/ta/hust-kaoyan/question-ranking解法:

#include<iostream>
using namespace std;
int main()
{int monthDay[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//将每月有多少天用一个数组存起来//这里有一个技巧,第一个位置多存了一个0,方便后面的月份可以直接对应到数组的下标int year, day;int month = 1;//给定初值month为1while (cin >> year  >> day){//判断输入的年份是否是闰年if ((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0)){monthDay[2] = 29;//是闰年,二月份为28天}else{monthDay[2] = 28;}while (day > monthDay[month])//如果day超过的当月的天数,则继续迭代{day -= monthDay[month];month++;if (month == 13){year++;month = 1;}}printf("%04d-%02d-%02d\n", year, month, day);//注意打印的问题}return 0;
}

通过此题注意一下输入的问题:

题目三:

Day of Week_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/a3417270d1c0421587a60b93cdacbca0?tpId=40&tqId=21439&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking

翻译一下此题:
描述:我们现在在俄罗斯使用公历方式来计算日期。闰年是指能被4整除但不能被100整除的年份,或者能被400整除的年份。例如,2004年、2180年和2400年是闰年,而2005年、2181年和2300年不是闰年。你的任务是编写一个程序,根据今天关于日期的约定,计算给定日期最近的过去或未来的星期几。

输入描述:有一行文字包含了日期数字d、月份名称M和年份y(1000≤y≤3000)。月份名称用对应的英文名称,首字母大写。

输出描述:请输出一行,其中包含与日期对应的星期几的英文名称,首字母大写。所有其他字母必须是小写。输入/输出中的月份和星期名称:一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月,星期日、星期一、星期二、星期三、星期四、星期五、星期六。

思路:

C++的字符串操作更方便,下面来看C++中字符串的使用:

map也是C++中的语法,通过map可以非常方便的完成映射的关系对应

 解析:

#include<iostream>
#include<string>
#include<map>
using namespace std;int main()
{int day, year;int monDay[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };string MonthName;//键 key  值 valuemap<string,int> String_to_int={{"January", 1},{"February",2},{ "March",3},{"April",4},{"May",5},{"June",6},{"July",7},{"August",8},{"September",9},{"October",10},{"November",11},{"December",12}};while (cin >> day >> MonthName >> year){int month = String_to_int[MonthName];//将字符串的月份转为数字的月份//用flag标志位判断是现在还是未来的日子int flag = 0;if ((year > 2024)|| ((year == 2024) && (month > 1))|| ((year == 2024) && (month == 1) && (day > 25))){flag = 0;//说明是未来的日子}else{flag = 1;//说明是之前的日子}int begyear, begmonth, begday, endyear, endmonth, endday;if (flag == 0){//说明是未来的日子begyear = 2024;begmonth = 1;begday = 25;endyear = year;endmonth = month;endday = day;}else{//说明是之前的日子begyear = year;begmonth = month;begday = day;endyear = 2024;endmonth = 1;endday = 25;}int count = 0;while (true){if (begyear == endyear && begmonth == endmonth && begday == endday){//说明找到相等的然后退出循环break;}count++;//相差的天数+1//判断输入的年份是否是闰年//注意这一步非常容易错,判断这个闰年一定要放在这个循环之中,因为每一次循环时,year都在变if ((begyear % 400 == 0) || ((begyear % 4 == 0) && (begyear % 100 != 0))){monDay[2] = 29;//是闰年,二月份为28天}else{monDay[2] = 28;}begday++;if (begday > monDay[begmonth])//利用nextDay的思路去计算相差多少天{begmonth++;begday = 1;if (begmonth == 13){begyear++;begmonth = 1;}}}//通过count来判断中间相差多少天int weekDay[7] = { 7,1,2,3,4,5,6 };//这个数组的设计一定要在0的位置设置为7map<int,string> WeekDay_to_string={{7,"Sunday"},{1,"Monday"},{2,"Tuesday"},{3,"Wednesday"},{4,"Thursday"},{5,"Friday"},{6,"Saturday"}};int remain = count % 7;//计算一下相差的天数对7求模int today = 4;//当前为星期4if (flag == 0){//说明是未来的日子,today在weekday数组中往后移动while (remain){today++;remain--;if (today > 6)//如果超出数组的范围,置为0{today = 0;}}}else{//说明是之前的日子,today在weekday数组中往前移动while (remain){today--;remain--;if (today < 0)//如果超出数组的范围,置为6{today = 6;}}}cout << WeekDay_to_string[weekDay[today]] << endl;}return 0;
}

3.其他的模拟类型:

其他类型的模拟题通常多变,没有确定的出题方式。然 而,在面对这类题目时,大可不必担心,这类题目是怎么描述的,就按照它说的做,用代码模拟出题面的要求即可。

题目一:
剩下的树_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/f5787c69f5cf41499ba4706bc93700a2?tpId=60&tqId=29497&tPage=2&ru=/kaoyan/retest/1001&qru=/ta/tsing-kaoyan/question-ranking解析:

#include<iostream>
using namespace std;
int main()
{int arr[10001] = { 0 };//利用一共数组存所有的树,多给一个位置//用1表示一棵树,0表示没有,初始化为0int L, M;cin >> L >> M;//输入L和Mfor (int i = 0; i <= L; i++){arr[i] = 1;//将L颗树都置为1}int left, right;while (M){cin >> left >> right;for (int i = left; i <= right; i++){arr[i] = 0;//将移走的树置为0}M--;}int count = 0;//用来统计还剩下的树for (int i = 0; i <= L; i++){if (arr[i] == 1){count++;}}cout << count;return 0;
}

题目二:

手机键盘_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/20082c12f1ec43b29cd27c805cd476cd?tpId=60&tqId=29478&tPage=1&ru=/kaoyan/retest/1001&qru=/ta/tsing-kaoyan/question-ranking思路:

解析:

#include<map>
#include<iostream>
using namespace std;int main()
{//输入某个字母需要花费的时间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}};//某个字母属于哪个按键,用来判断是否与上一次按键冲突需要等待map<char, int> _whichKey = {{'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}};char str[100];while (cin >> str){int LastKey = 0;//记录上一次按键为0int sumtime = 0;//用来统计总时间for (int i = 0; str[i] != '\0'; i++){if (LastKey == _whichKey[str[i]]){//如果本次按键与上次按键为同一个按键,需要等待两个时间sumtime += 2;}sumtime += input_time[str[i]];//再累加上每个按键的输入时间//最后记得一定要更新Lastkey值LastKey = _whichKey[str[i]];}cout << sumtime;}return 0;
}

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

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

相关文章

利用aiohttp异步爬虫实现网站数据高效抓取

前言 大数据时代&#xff0c;网站数据的高效抓取对于众多应用程序和服务来说至关重要。传统的同步爬虫技术在面对大规模数据抓取时往往效率低下&#xff0c;而异步爬虫技术的出现为解决这一问题提供了新的思路。本文将介绍如何利用aiohttp异步爬虫技术实现网站数据抓取&#x…

【UE插件DTRabbitMQ】 虚幻引擎蓝图连接RabbitMQ服务器使用插件说明

本插件可以使用蓝图连接 RabbitMQ服务器&#xff0c;并推送或者监听消息。 下载地址在文章最后。 1. 节点说明 Create RabbitMQ Client - 创建RabbitMQ客户端对象 创建一个RabbitMQ客户端对象&#xff0c;返回的对象需要提升为变量&#xff0c;以后就是用这个对象去操作。 Con…

Leetcode2826. 将三个组排序

Every day a Leetcode 题目来源&#xff1a;2826. 将三个组排序 解法1&#xff1a;贪心 二分查找 最长递增子序列的变种题。 利用 Leetcode300. 最长递增子序列 的方法&#xff0c;求出数组 nums 的最长递增子序列 g&#xff0c;最后答案为 nums.size() - g.size()。 代码…

【JaveWeb教程】(34)SpringBootWeb案例之《智能学习辅助系统》的详细实现步骤与代码示例(7)配置文件的设置

目录 SpringBootWeb案例054. 配置文件4.1 参数配置化4.2 yml配置文件4.3 ConfigurationProperties SpringBootWeb案例05 前面我们已经实现了员工信息的条件分页查询以及删除操作&#xff0c;以及实现新增和修改员工。 本节的主要内容&#xff1a; 配置文件的设置 4. 配置文件…

nginx反向代理负载均衡

一&#xff0c;kali作为负载服务器 打开kali nginx服务&#xff0c;访问页面如下 使用docker拉取nginx&#xff0c;并做出端口映射 ┌──(root?kali)-[/etc/nginx] └─# docker pull nginx ┌──(root㉿kali)-[/etc/nginx] └─# docker run -p 11111:80 --name Jdr -d ng…

C++ STL之priority_queue的使用及模拟实现

文章目录 1. 介绍2. priority_queue的使用3. priority_queue的模拟实现 1. 介绍 英文解释&#xff1a; 也就是说&#xff1a; 优先队列是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它的第一个元素总是它所包含的元素中最大的。 此上下文类似于堆&#xff0c…

算子:详细篇

目录 一、执行环境 1.1 创建执行环境 1.2 执行模式 二、源算子 2.1 从集合中读取数据 2.2 从文件读取数据 2.3 从socket读取数据 2.4 从kafka读取数据 三、转换算子 3.1 基本转换算子 &#xff08;1&#xff09;映射(map) &#xff08;2&#xff09;过滤(filter) &#xff08…

新建react项目,react-router-dom配置路由,引入antd

提示&#xff1a;reactrouter6.4版本&#xff0c;与reactrouter5.0的版本用法有区别&#xff0c;互不兼容需注意 文章目录 前言一、创建项目二、新建文件并引入react-router-dom、antd三、配置路由跳转四、效果五、遇到的问题六、参考文档总结 前言 需求&#xff1a;新建react项…

自动化测试平台搭建背景及记录

在目前产品的迭代过程中&#xff0c;公司现有的自动化测试体系存在很多问题&#xff0c;大多数情况是人工进行用例回归测试&#xff0c;低效且易出错&#xff0c;导致测试流程在效率和品质方面均未达到理想状态。同时&#xff0c;业务上线周期的日益缩短也导致产品质量的不稳定…

uniapp组件库Line 线条 的适用方法

目录 #平台差异说明 #基本使用 #线条类型 1.3.7 #兼容性 #API #Props 此组件一般用于显示一根线条&#xff0c;用于分隔内容块&#xff0c;有横向和竖向两种模式&#xff0c;且能设置0.5px线条&#xff0c;使用也很简单。 #平台差异说明 AppH5微信小程序支付宝小程序百…

三.逻辑架构

逻辑架构 1.逻辑架构剖析1.1服务器处理客户端请求1.2Connectors1.3 第一层&#xff1a;连接层1.4 第二层&#xff1a;服务层1.5 第三层&#xff1a;引擎层1.6存储层1.7小结 2.SQL执行流程2.1MySQL中的SQL执行流程2.2MySQL8中SQL执行原理2.3MySQL5.7中SQL执行原理2.4SQL语法顺序…

C++大学教程(第九版)6.48掷骰子游戏的改进

文章目录 题目代码运行截图 题目 (掷骰子游戏的改进)请修改图6.11 中的双游戏序允许家下赌注。 把序中运行掷骰子游戏的部分打包为一个函数。 初始化变量 bankBalance 为 1000美元。 提示玩家输入赌注数&#xff1a;wager。 利用一个 while 循环来检查 wager 是否小于或等于 b…

【数据结构和算法】--- 二叉树(4)--二叉树链式结构的实现(2)

目录 一、二叉树剩余函数1.1二叉树的层序遍历1.2判断二叉树是否为完全二叉树1.3二叉树销毁 二、二叉树的构建及遍历OJ题 一、二叉树剩余函数 1.1二叉树的层序遍历 层序遍历&#xff1a; 除了先序遍历、中序遍历、后序遍历外&#xff0c;还可以对二叉树进行层序遍历。设二叉树…

存内生态构建重要一环- 存内计算工具链

本篇文章重点讲述存内计算相关工具链&#xff0c;我们将从工具链定义出发&#xff0c;依次讲述工具链研究背景及现有工具链、存内计算相关工具链发展现状、存内计算工具链未来展望等内容。 一.工具链研究背景及现有工具链 工具链&#xff0c;英文名称toolchain&#xff0c;通…

自然语言处理-文本标注

文本标注 现在让我们考虑词元级任务&#xff0c;比如文本标注&#xff08;text tagging&#xff09;&#xff0c;其中每个词元都被分配了一个标签。在文本标注任务中&#xff0c;词性标注为每个单词分配词性标记&#xff08;例如&#xff0c;形容词和限定词&#xff09;。 根据…

MySQL数据的增删改查

小练习 1. 在数据库 exercise 中创建课程表 stu_course &#xff0c;包含字段课程编号 (number) &#xff0c;类型为整数&#xff0c;长度为 11 &#xff0c;是主键&#xff0c;自增长&#xff0c;非空、课程名称 (name) &#xff0c;类型为字符串&#xff0c;长度为 20 &…

The Rise and Potential of Large Language Model Based Agents: A Survey 导读

这篇论文探讨了基于大型语言模型(LLM)的智能代理的发展和潜力。传统的AI算法或训练策略只能提高特定任务的表现,而LLM作为通用且强大的模型,可以为设计适应不同场景的智能代理提供基础。作者提出了一个包含“大脑”、“感知”和“行动”的通用框架,并将其应用于单个代理、…

macos Android平台签名证书(.keystore)

一、申请appid的使用说明&#xff08;有appid的请忽略申请apid&#xff09; 创建应用 申请的appid在源码视图填写后会自动生成一个对应的包名 ⚠️注意&#xff1a;申请appid的时候应用名称和项目名称保持一致。 二、 Android如何使用自用证书进行打包 1.找到安装jdk的路径 …

【深度学习】【AutoDL】【SSH】通过VSCode和SSH使用AutoDL服务器训练模型

身边没有显卡资源或不足以训练模型时&#xff0c;可以租赁服务器的显卡。 1、注册AutoDL并配置环境 首先打开AutoDL官网&#xff0c;注册账号并租赁自己期望的显卡资源 点击“租赁”之后&#xff0c;我们要继续选择基础环境。此处&#xff0c;我们让其自动配置好基础的pytor…

.NET中的matplotlib平替,ScottPlot简单使用

文章目录 前言解决方案Python调用.NET 原生解决 ScottPlot找到文章ScottPlot Nuget安装简单代码测试代码跑不了5.0新版本测试 总结 前言 我之前在学OpenCV 三语言开发的时候&#xff0c;遇到了一个问题&#xff0c;怎么可视化的显示数据。Python有matplotlib&#xff0c;那么C…