868历年真题算法设计题+程序设计题

11.52013年真题*4

一天四道太顶了,11.6-11.15先且两天四道题,先把数学二轮+三轮结束!

  1. 如果程序设计题写不了 核心算法 ,但是把思路写上去,只将核心函数空出来也能拿些分!!
  2. DFS大概率不会和stack同时出现,一般是使用stack来模拟DFS;

【2013 1】一个用邻接矩阵存储的有向图,请用实现该图的深度优先算法。
算法:DFS,矩阵+有向图 ,可递归
一般:邻接链表的有向图,如果碰到了则开始DFS,如果读不到则顺延往后 递归

//数据结构
#define maxsize 100
typedef int VexType;
typedef int EdgeType;
typedef struct{VexType vex[maxsize];EdgeType edge[maxsize][maxsize];int vexnum,edgenum;
}MGraph;
int visit[maxsize];
void Visit(int n);
void DFS(MGraph g , int n = 0){//从n开始遍历Visit(n);visit[n] = 1;for(int i = n ; i < g.vexnum ;i++){for(int j = 0; j < g.vexnum; j++){if(g.edge[i][j] == 1 && visit[j] == 0)DFS(g , j);}}	
}

问题:不需要双重循环,使用了递归!!若是非递归是双循环【我用的GPT检查的代码,再对答案】

//修改
int visit[maxsize];
void Visit(int n);
void DFS(MGraph g , int n = 0){//从0开始遍历Visit(n);visit[n] = 1;for(int j = 0; j < g.vexnum; j++){if(g.edge[n][j] == 1 && visit[j] == 0)DFS(g , j);}	
}
//【15 代码回顾】
//非递归使用栈进行递归模拟
//外层循环遍历图中每个结点,保证每个连通分量的所有结点都被访问到
//每个未被访问的节点i,为起点开始一个新的DFS遍历,未被访问的节点被压入栈
//出栈后,进行访问
int visit[maxsize];
void Visit(int n);
void DFS_UnRecursion(MGraph g){stack<int> st;for(int i = 0 ; i < g.vexnum ; i++){//外层循环if(visit[i] == 0)st.push(i);//DFS-出栈访问、未被访问入栈while(!st.empty()){int w = st.top();st.pop();if(visit[w] == 0){Visit(w);visit[w] = 1;//入栈for(int v = g.vexnum - 1 ; v >= 0; v-- ){if(g.edge[w][v] == 1 && visit[v] == 0)st.push(v);}}}}
}

【2013 2】一个人从2000年1月1日开始,三天打鱼,两天晒网。写一个程序,计算他在以后的某年某月某日是打鱼还是晒网。终止日期从键盘输入。(假设从2000年1月1日开始到2012年11月18日结束。)
要写出月+日的二重数组,输入是年月日,所以代码应该先计算是多少天,再计算是打鱼还是筛网,一组是5天,所以先days%5得到余数,如果是1 2 3则是打鱼 4 0则是晒网
重点是计算有多少天,年注意有闰年和平年的区分

#include<iostream>
using namespace std;
int st_year = 2000 ,st_month = 1 , st_day = 1;
int day_mon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int countDay(int year ,int month ,int day){int res = 0;//前几年for(int i = st_year ; i < year ;i++){if(i % 4 == 0)res += 366;elseres += 365}//该年的月for(int i = 0 ; i < month-1 ; i++){res += day_mon[i];if(i == 1 && (year%4 == 0) )res++;}//该月的天res += day;return res;
}
void main(){int year , month , day;cin >> year >> month >> day >> endl;int num = countDay(year ,month ,day);int judge = num%5;if(judge == 1 || judge == 2 ||judge == 3)cout << "打鱼" <<endl;elsecout << "晒网" <<endl;
}

在这里插入图片描述

#include <iostream>
using namespace std;int st_year = 2000, st_month = 1, st_day = 1;
int day_mon[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};// 闰年判断
bool isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}// 计算从起始日期到给定日期的天数
int countDay(int year, int month, int day) {int res = 0;// 前几年for (int i = st_year; i < year; i++) {if (isLeapYear(i))res += 366;elseres += 365;}// 该年的前几个月for (int i = 0; i < month - 1; i++) {res += day_mon[i];if (i == 1 && isLeapYear(year))  // 如果是闰年的2月,多加1天res++;}// 加上该月的天数res += day - 1;  // 不包含起始日return res;
}int main() {int year, month, day;cout << "请输入年月日(格式:年 月 日):";cin >> year >> month >> day;int num = countDay(year, month, day);int judge = num % 5;if (judge == 1 || judge == 2 || judge == 3)cout << "打鱼" << endl;elsecout << "晒网" << endl;return 0;
}

【2013 1】交叉奇偶校验 检验规则:行和列的1的个数为偶数时,表示正确。例:
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
所有行中1的个数为2,0,4,2 所有列中1的个数为2,2,2,2 请编写一个程序,对给定规模的矩阵(n*n ,> n<1000)进行交叉奇偶校验。若校验正确,则输出“OK”;若不正确且仅有一处错误,则输出“ErrorIn(2,3)”,(2,3)表示第二行第三列出现错误;若不正确且有多出错误,则输出为"Error"。

#include<iostream>
#define maxsize 100
int Count(int vec[] , int n){int num = 0;//记录1的个数for(int i = 0 ; i < n ; i++ ){if(vec[i] == 1)num++;}return num;
}
int main(int matrix[][],int n){								   //问题:【细节】输入学习下方代码int error = 0;//用于判断错误个数int row = -1 , col = -1;//行的判断for(int i = 0 ; i < n ; i++){int num = Count(matrix[i] , n);if(num % 2 == 1){if(row > 0){									   //问题:【细节】这里应该是 >= !cout << "Error" << endl;return 0;}elserow = i;}}//列的判断for(int i = 0 ; i < n ; i++){//第i列int vec[maxsize];for(int j = 0 ; j < n ; j++){vec[j] = matrix[j][i];//vec存储第i列}int num = Count(vec , n);if(num % 2 == 1){if(col > 0){									   //问题:【细节】这里应该是 >= !cout << "Error" << endl;return 0;}elsecol = i;}}if(row > 0 && col > 0) 									   //问题:【细节】这里应该是 >= !cout << "ErrorIn(" << row << "," << col << ")" << endl;//问题:【细节】这里应该是 row+1 和col+1!!elsecout << "OK" << endl;return 0;
}

总结:代码思路实现都不难,还是【细节】出问题!!

#include<iostream>
#include<vector>
using namespace std;int Count(int vec[], int n) {int num = 0;for (int i = 0; i < n; i++) {if (vec[i] == 1)num++;}return num;
}int main() {int n;cin >> n;  // 读取矩阵的大小vector<vector<int>> matrix(n, vector<int>(n));  // 使用动态数组int error = 0;int row = -1, col = -1;// 读取矩阵for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cin >> matrix[i][j];}}// 行的判断for (int i = 0; i < n; i++) {int num = Count(matrix[i].data(), n);if (num % 2 == 1) {  // 行错误if (row >= 0) {cout << "Error" << endl;return 0;} else {row = i;}}}// 列的判断for (int i = 0; i < n; i++) {int vec[maxsize];for (int j = 0; j < n; j++) {vec[j] = matrix[j][i];  // vec存储第i列}int num = Count(vec, n);if (num % 2 == 1) {  // 列错误if (col >= 0) {cout << "Error" << endl;return 0;} else {col = i;}}}if (row >= 0 && col >= 0) {cout << "ErrorIn(" << row + 1 << "," << col + 1 << ")" << endl;} else {cout << "OK" << endl;}return 0;
}

【2013 2】二叉树T的先序遍历序列为:DBACEGF,中序遍历序列为:ABCDEFG。

  • 求出其后序遍历的结果。 回答: 后序遍历为ACBFGED
  • 编写程序,读入先序遍历与中序遍历的结果存入字符数组,并求出后序遍历结果输出。

程序:先读入先序和中序存入字符数组 推 后序遍历
思路:先还原树,再看后续
不会了,只能写这么多

//数据结构
typedef struct TNode{char data;struct TNode *left ,*right;
}TNode;
#include<iostream>
#define maxsize 100
using namespace std;char preOrder[maxsize];
char inOrder[maxsize];void StructTree(TNode *&t , int root){//递归的底if(preOrder[])//新建节点TNode newNode = (TNode*)malloc(sizeof(TNode));newNode->data = preOrder[root];newNode->left = StructTree(t , root+1);newNode->right = StructTree(t , i+1);}
void PostOrder(TNode *t){if(t == NULL)return;PostOrder(t->left);PostOrder(t->right);cout << t->data;
}
int main(){cin >> "请输入先序遍历序列:";for(int i = 0 ; i < maxsize ; i++)cin >> preOrder[i];cin >> "请输入中序遍历序列:";for(int i = 0 ; i < maxsize ; i++)cin >> inOrder[i];//还原树TNode *t;StructTree(t,0);//确认后序遍历序列PostOrder(T);cout << endl; return 0;
}

在这里插入图片描述

TNode* StructTree(int& preIndex ,int inStart ,int inEnd){if(inStart > intEnd)return nullptr;//先序遍历的根结点char rootData = preOrder[preIndex++];TNode* root = (TNode*)malloc(sizeof(TNode));root->data = rootData;root->left = nullptr;root->right = nullptr;//在中序遍历中找到根结点的位置int rootIndex = inStart;while(inOrder[rootIndex] != rootData)rootIndex++;//构建左子树和右子树root->left = StructTree(preIndex , inStart , rootIndex - 1);root->right = StructTree(preIndex , rootIndex + 1, inEnd);
}// 后序遍历
void PostOrder(TNode* root) {if (root == nullptr)return;PostOrder(root->left);PostOrder(root->right);cout << root->data;
}int main(){
// 输入先序和中序遍历cout << "请输入先序遍历序列:";string preStr;cin >> preStr;for (int i = 0; i < preStr.length(); i++) {preOrder[i] = preStr[i];}cout << "请输入中序遍历序列:";string inStr;cin >> inStr;for (int i = 0; i < inStr.length(); i++) {inOrder[i] = inStr[i];}// 变量初始化int preIndex = 0;int n = preStr.length();  // 先序和中序长度相同// 还原二叉树TNode* root = StructTree(preIndex, 0, n - 1);// 输出后序遍历cout << "后序遍历序列为: ";PostOrder(root);cout << endl;return 0;
}

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

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

相关文章

仿制药一致性评价数据库之药品一致性评价查询

在《我不是药神》电影中&#xff0c;白血病特效药“格列宁”原研药与印度仿制药价格相差近10倍&#xff0c;在仿制药生物等效达到99%以上情况下&#xff0c;你会如何抉择&#xff1f;即便在如今的美国&#xff0c;仿制药也占据了90%以上的用药市场。 正如《仿制药的真相》书中…

【JS学习】08. web API-事件进阶

Web APIs - 第3天 进一步学习 事件进阶&#xff0c;实现更多交互的网页特效&#xff0c;结合事件流的特征优化事件执行的效率 掌握阻止事件冒泡的方法理解事件委托的实现原理 事件流 事件流是对事件执行过程的描述&#xff0c;了解事件的执行过程有助于加深对事件的理解&…

Spring Validation数据校检

文章目录 Spring Validation1 关于Spring Validation2 使用流程3 快速入门4 运行异常处理4.1 说明4.2 处理异常4.3 明确提示消息 5 常用注解5.1 NotNull注解5.2 NotEmpty 注解5.3 NotBlank 注解5.4 Size 注解5.5 Range 注解 6 非POJO参数校验6.1 使用流程6.2 使用示例 Spring V…

Node.js 全栈开发进阶篇

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;node.js篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:node.js- 全栈开发进阶篇 前言 大家好&#xff0c;我是青山。在上一篇文章中&#xff0c;…

实战| 使用深度学习分割和计算水体和农田面积【Pytorch附源码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

虚拟机 Ubuntu 扩容

文章目录 一、Vmware 重新分配 Ubuntu 空间二、Ubuntu 扩容分区 一、Vmware 重新分配 Ubuntu 空间 先打开 Vmware &#xff0c;选择要重新分配空间的虚拟机 点击 编辑虚拟机设置 &#xff0c;再点击 硬盘 &#xff0c;再点击 扩展 选择预计扩展的空间&#xff0c;然后点击 扩展…

Mybatis的高级用法

MybatisPlus 实体类注释字段 TableName&#xff08;“数据库表名”&#xff09; TableId&#xff08;“主键名”&#xff09; TableField&#xff08;“字段名”&#xff09; BaseMapper接口对象方法 普通查询 1、主键 T selectById(Serializable id) 使用场景为通过主…

excel表格加锁忘密码怎么解决?

百度好多方法都无效&#xff0c;下面方法可行&#xff1a; 点击sheet单元格名称&#xff0c;鼠标右边出现弹框选择“查看代码”&#xff1a; 出现的框中输入以下代码: Sub demo()// 锁定当前工作表&#xff0c;允许筛选操作ActiveSheet.Protect DrawingObjects:True, CONTENT…

Vue中ref、reactive、toRef、toRefs的区别

一、ref、reactive setup 函数中默认定义的变量并不是响应式的&#xff08;即数据变了以后页面不会跟着变&#xff09;&#xff0c;如果想让变量变为响应式的变量&#xff0c;需要使用 ref 和 reactive 函数修饰变量。 ref 函数可以把基本类型变量变为响应式引用reactive 函数…

PDF全能免费转换 3.18 | 免费PDF工具集,多种转换和美化功能

PDF全能免费转换是一款主打免费好用的PDF工具集&#xff0c;功能丰富且实用。主要功能包括&#xff1a;PDF转Word/PPT/Excel/TXT/图片&#xff0c;PDF压缩和合并&#xff0c;多图合并成长图或PDF&#xff0c;身份证扫描、文件扫描、证件扫描&#xff0c;证件照换底色&#xff0…

DICOM标准:DICOM标准中的公用模块、核心模块详解(一)——病人、研究、序列、参考帧和设备模块属性详解

目录 概述 1 公用病人IE模块 1.1 病人模块 2 公用的研究IE模块 2.1 常规研究模块 2.2 病人研究模块 3 公用序列IE模块 3.1 常规序列模块 3.1.1 常规序列属性描述 4 公用参考帧信息实体模块 4.1 参考帧模块 4.1.1 参考帧属性描述 5 公用设备IE模块 5.1 常规设备模…

Webpack 配置module.css报错Uncaught TypeError: Cannot read properties of undefined

我的项目结构如下: 入口文件是index.jsx&#xff0c;组件Button.jsx使用了样式button.module.css .btn {background-color: #4CAF50;border: none;color: white; padding: 15px 32px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;margin:…

PyCharm中pylint安装与使用

目录 1. 安装插件2. pycharm中使用该功能3. 命令行使用 1. 安装插件 然后重启 2. pycharm中使用该功能 3. 命令行使用 前提是先 pip install pylint pylint demo01.py下面红框内容的意思是&#xff0c;得到10分/ 满分10分&#xff0c;上次运行获得8.33分&#xff0c;经调整…

无人机避障——大疆与Airsim中的角速度信息订阅获取

本文先将Airsim仿真中的角速度信息获取弄好&#xff0c;然后再将大疆SDK中的角速度话题订阅一下&#xff0c;并验证获取角速度信息&#xff0c;后续为DWA动态窗口法替代PID作为局部路径规划做足准备。 Airsim中的角速度信息获取 Airsim无人机状态获取&#xff1a;getMultirot…

绿宝石二十载:如何打破国外在高端电容市场的垄断?

【哔哥哔特导读】作为本土电容器企业&#xff0c;绿宝石凭借二十年的技术创新与市场深耕&#xff0c;在高端电容市场取得了显著突破。从铝电解电容器到叠层式固态电容器&#xff0c;绿宝石是如何做到的&#xff1f; 在当今竞争激烈的电子元器件市场中&#xff0c;技术创新、定…

JS中DOM和BOM

DOM DOM&#xff08;文档对象模型&#xff09;是一个跨平台和语言独立的接口&#xff0c;它允许程序和脚本动态地访问和更新文档的内容、结构和样式。在网页浏览器中&#xff0c;DOM 通常表示 HTML 或 XML 文档的对象模型。DOM 将网页内容视为节点树&#xff0c;其中每个节点都…

从配置anaconda到配置pycharm

Anaconda 是全球领先的数据科学与机器学习平台&#xff0c;专为开发者、数据分析师设计。通过 Anaconda&#xff0c;可以轻松管理数据环境、安装依赖包&#xff0c;快速启动数据分析、机器学习项目。 丰富的 Python 数据科学库&#xff1a;Anaconda 集成了常用的 Python 数据科…

JAVA开源项目 影城管理系统 计算机毕业设计

本文项目编号 T 045 &#xff0c;文末自助获取源码 \color{red}{T045&#xff0c;文末自助获取源码} T045&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 用…

无人机测绘遥感技术算法概述!

一、数据采集算法 航线规划算法 根据测绘任务需求&#xff0c;利用地理信息系统&#xff08;GIS&#xff09;和遥感技术&#xff0c;对无人机进行航线规划。 考虑地形、气候、障碍物等因素&#xff0c;优化飞行路径&#xff0c;确保数据采集的完整性和准确性。 传感器控制算…

剪绳子小游戏 #线上游玩 #介绍 #部分代码截图展示

自制的割绳子小游戏。 线上游玩地址&#xff1a;戳Rain的剪绳子游戏。 不得不承认做了很久。。。 简单介绍一下。。。 割绳子游戏机制 物理引擎 《割绳子》的核心在于其高度逼真的物理引擎。游戏中的所有物体&#xff0c;包括糖果、绳索、气球、弹簧等&#xff0c;都遵循…