中科大2006年复试机试题

news2025/1/18 1:57:06

中科大2006年复试机试题

文章目录

  • 中科大2006年复试机试题
  • 第一题
    • 问题描述
    • 解题思路及代码
  • 第二题
    • 问题描述
    • 解题思路及代码
  • 第三题
    • 问题描述
    • 解题思路及代码
  • 第四题
    • 问题描述
    • 解题思路及代码
  • 第五题
    • 问题描述
    • 解题思路及代码
  • 第六题
    • 问题描述
    • 解题思路及代码

第一题

问题描述

求矩阵的转置。
给一个二维整数数组 matrix, 返回 matrix 的 转置矩阵。
示例 1

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[1,4,7],[2,5,8],[3,6,9]]

解题思路及代码

矩阵的第i行为转置的第i列,与Leetcode上的题目一致
矩阵转置

#include<iostream>
using namespace std;
int main()
{
    int m,n;
    cout<<"输入行数:";
    cin>>m;
    cout<<"输入列数:";
    cin>>n;
    int matrix[m][n];
    for(int i = 0; i < m; i++)
    {
        for(int j = 0; j < n; j++)
        {
            cin>>matrix[i][j];
        }
    }
    int matrix1[n][m];
    for(int i = 0; i < m; i++)
    {
        for(int j = 0; j < n; j++)
        {
            matrix1[j][i] = matrix[i][j];
        }
    }
    for(int i = 0; i < n; i++)
    {
        cout<<endl;
        for(int j = 0; j < m; j++)
        {
            cout<<matrix1[i][j];
        }
    }
    return 0;
}

第二题

问题描述

写一个程序,判断C语言中的变量命名是否合法。
示例 1

输入:hello@
输出:true

解题思路及代码

变量合法条件:
1.变量名可以由字母,数字或下划线组成
2.变量名只能以字母或下划线开头
isalpha( c ):判断是否为字母
isdigit( c ):判断是否为数字

#include <iostream>
using namespace std;
bool isValid(string s)
{
    if(!(isalpha(s[0])||s[0]=='_'))
       return false;
    for(int i = 1;i < s.size();i++)
    {
        if(!(isalpha(s[i])||s[0]=='_'||isdigit(s[i])))
            return false;
    }
    return true;
}
int main()
{
    string s;
    cin>>s;
    cout<<isValid(s)<<endl;
    return 0;
}

第三题

问题描述

编写一程序,将中缀表达式转化为后缀表达式(含括号情况)。从expr.in文件中读取输入,将结果输出到expr.out文件中。
示例 1

输入:a-b*(c+d)
输出:abcd+*-

解题思路及代码

即将中缀表达式转换为后缀表达式。只使用一个栈来存储算符,并且用一个表来存储算符的优先级。当遇到运算数时直接输出,遇到算符时根据规则压入栈或者输出。
priority[‘(’] = 0;
priority[‘+’] = priority[‘-’] = 1;
priority[‘*’] = priority[‘/’] = 2;

#include <fstream>
#include <stack>
#include <unordered_map>
#include <vector>
#include<iostream>
using namespace std;
int main()
{

    ifstream ifs("./expr.in.txt");
    ofstream ofs("./expr.out.txt");
    vector<char> v;
    stack<char> opStk;
    unordered_map<char, int> priority;
    priority['('] = 0;
    priority['+'] = priority['-'] = 1;
    priority['*'] = priority['/'] = 2;
    char c;
    while(ifs >> c)
        v.push_back(c);
    for(char c: v)
    {
        if(isalpha(c))
        {
            ofs<<c;
            cout<<c<<endl;
        }
        else if(c == '(')
        {
            opStk.push(c);
        }
        else if(c == ')')
        {
            char ch = opStk.top();
            while(ch != '(')
            {
                opStk.pop();
                ofs << ch;
                ch = opStk.top();
            }
            opStk.pop();
        }
        else
        {
           while (!opStk.empty() && priority[c] < priority[opStk.top()])
           {
               char op = opStk.top();
               opStk.pop();
               ofs << op;
           }
           opStk.push(c);
        }

    }
    while (!opStk.empty())
    {
        char ch = opStk.top();
        opStk.pop();
        ofs << ch;
    }
  return 0;
}

第四题

问题描述

给定两个数m和n,实现如下功能:如m=3,n=4时,输出

1 2 3
1 2 4
1 3 4
2 3 4

解题思路及代码

其实没太懂这个题的意思,只能凭感觉完成,理解成1~n所有的三个数的全排序。

#include <iostream>
using namespace std;
int main() {
  int m, n;
  cin >> m >> n;
  for(int i = 0; i < m; i++)
  {
      for(int j = i+1; j < n;j++)
      {
          for(int k = j+1; k < n;k++)
          {
              cout<<i+1<<" "<< j+1<<" "<<k+1<<endl;
          }
      }

  }
  return 0;
}

第五题

问题描述

给定一无向图的矩阵存储,求其最大连通分量。图的信息存储在文件graph.in中,文件的第一行给无向图的顶点数量n和边数k,顶点序号从0到n-1,接下来分别给出k条边的两个顶点号。输出无向图中的最大连通分量的所有顶点号,输出到文件graph.out中。
示例 1

输入:
10 6
0 1
0 2
4 5
4 6
5 7
8 9
输出:4 5 7 6

解题思路及代码

该题的意思是求连通分量,故可采用DFS来求连通分量。设置visit数组标记该顶点是否访问过,然后按照顶点序号从小到大的顺序用dfs来遍历所有的连通分量,并且保存最大的连通分量中的所有顶点。

#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
int dfs(vector<vector<int>> &g, vector<int> &vis, vector<int> &tmp,int idx, int n)
{
    if(vis[idx])
        return 0;
    else
    {
        vis[idx] = 1;
        tmp.push_back(idx);
        int ans = 1;
        for(int i =  0; i < n; i++)
        {
            if(g[idx][i])
                ans+=dfs(g,vis,tmp,i,n);//深度优先遍历计算连通分量个数
        }
        return ans;
    }

}
int main()
{
    ifstream ifs("./graph.in.txt");
    ofstream ofs("./graph.out.txt");
    int n,m;
    ifs>>n>>m;
    cout<<n<<" "<<m<<endl;
    vector<vector<int>> g(n,vector<int>(n,0));
    vector<int>vis(n,0);
    vector<int>ans,tmp;
    int maxval = 0,tmpval = 0;
    for(int i = 0; i < m; i++)
    {
       int c1,c2;
       ifs>>c1>>c2;
       g[c1][c2] = g[c2][c1] = 1;//构造图
    }
    for(int i = 0; i < n; i++)
    {
        if(vis[i] == 0)
        {
           int tmpval = dfs(g,vis,tmp,i,n);
           if(tmpval > maxval)
           {
               maxval = tmpval;
               ans = tmp;
           }
           tmp.clear();
        }
    }
    for(int i = 0; i < ans.size();i++)
    {
        ofs<<ans[i]<<" ";
    }
    return 0;
}

第六题

问题描述

求连续子数组的最大和,比如[-2,1,-3,4,-1,2,1,-5,4]中的连续子数组[4,-1,2,1]的和最大,为6。数组中的数字保存在文件number.in中,求出结果输出到文件number.out中。
示例 1

输入:-2 1 -3 4 -1 2 1 -5 4
输出:6

解题思路及代码

这是一道比较典型动态规划的题目。
我们可以设数组为nums,动态规划列表为dp,则dp[i]表示以第i个元素结尾的子数组的最大和,dp满足如下递归公式:
dp[i] = dp[i-1]+nums[i] (当dp[i-1]>0时)
dp[i] = nums[i] (当dp[i-1]<0时)
此题与与Leetcode上的题目一致
在这里插入图片描述

#include<fstream>
#include<vector>
#include<iostream>
using namespace std;
int main()
{
    ifstream ifs("./number.in.txt");
    ofstream ofs("./number.out.txt");
    vector<int> nums;
    int num;
    while(ifs>>num)
    {
        nums.push_back(num);
    }
    int n = nums.size();
    vector<int>dp(n,nums[0]);
    int ans = nums[0];
    for(int i = 1; i < n ; i++)
    {
        dp[i] = (dp[i-1]>0)?dp[i-1]+nums[i]:nums[i];
        ans = (ans>dp[i])?ans:dp[i];
    }
    ofs<<ans;
    return 0;
}

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

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

相关文章

three.js入门篇6之 环境贴图、经纬线映射贴图与高动态范围成像HDR

目录013-1 环境贴图013-2 经纬度映射贴图与HDR013-1 环境贴图 就是把周边的环境&#xff0c;贴在物体的表面之上 注意&#xff1a;px&#xff1a;x轴正向&#xff0c;nx&#xff1a;x轴负向 import * as THREE from "three" // console.log(main.js,THREE);// 导入…

06什么是Fabless?什么是IDM?

Fabless是SIC&#xff08;半导体集成电路&#xff09;行业中无生产线设计公司的简称&#xff0c;只搞设计的无晶圆厂半导体公司&#xff0c;生产交给像台积电这样的代工厂去做。 IDM是整合元件制造商&#xff0c;像英特尔这样既设计又制造的就叫IDM&#xff0c;因为规模大&…

对于字节,16进制,2进制, 0xFF,位移的一些杂记

1.普通字符串95 对应的16进制的展示&#xff0c;使用工具查看如下图 下图为普通字符串 下图为95对应的16进制 95对应的16进制字符串为39 35》39代表一个字节 35代表另一个字节 &#xff08;一个字节是由两位16进制字符串组成&#xff0c;比如39或35&#xff09; 1个字节对应…

select for update加了行锁还是表锁?

最近在开发需求的时候&#xff0c;用到了select......for update。在代码评审的时候&#xff0c;一位同事说 &#xff0c;唯一索引一个非索引字段&#xff0c;是否可能会锁全表呢&#xff1f;本文将通过9个实验操作的例子&#xff0c;给大家验证select......for update到底加了…

迁移环境时,忘记私钥证书密码怎么办?

知行之桥的版本在进行不断更新&#xff0c;相较之前的版本而言&#xff0c;知行之桥每一次更新的版本&#xff0c;无论在操作还是功能亦或是便利性上都有更好的优势&#xff0c;因此不少企业会在新版本更新之后果断选择新的版本&#xff0c;企业选择版本更新之后&#xff0c;需…

He3 新版上新

系统功能更新 支持拖动工具&#xff0c;调整位置 支持置顶 支持自定义分类 新增工具 Paseto 生成器 2. 文本分析 JSON 转 PHP&#xff0c;YAML 转 PHP UTF7 编码、UTF7 解码 6. UTM 生成器 CSS 边框圆角生成器 CSV 类转换工具&#xff0c;目前支持 CSV 与 Markdown、HTML、JS…

什么是无代码ITSM工具

拥有强大 ITSM 团队的企业已经能够生存下来&#xff0c;并且在某些情况下在整个大流行期间表现出色。成功的 IT 团队以其在日常运营中断时快速恢复的能力而闻名。 当您需要重新组织服务交付流程时&#xff0c;ITSM 平台可以减少工程工作量&#xff0c;这对于制定弹性 ITSM 战略…

Python学习笔记——元组

Python将不能修改的值称为不可变的&#xff0c;而不可变的列表被称为元组。定义元组元组创建只需要在括号中添加元素&#xff0c;并使用逗号隔开即可。元组使用小括号 ( )&#xff0c;列表使用方括号 [ ]。定义元组后&#xff0c;就可以使用索引来访问其元素&#xff0c;就像访…

ansible作业二

ansible匹配自定义路径清单文件 查看当前匹配的清单文件路径 [rootserver ~]# ansible --version ansible [core 2.13.5]config file /etc/ansible/ansible.cfg --- 默认配置文件configured module search path [/root/.ansible/plugins/modules, /usr/share/ansible/plugin…

力扣(LeetCode)1150. 检查一个数是否在数组中占绝大多数(C++/Python3)

遍历 直观思考&#xff0c;一次遍历数组&#xff0c;计数 target 。用 target 出现次数和数组长度的一半做比较&#xff0c;即可得到答案。 class Solution { public:bool isMajorityElement(vector<int>& nums, int target) {int cnt 0;for(auto &x:nums)if(…

7、Servlet——Servlet核心接口和类、创建Servlet的三种方式

目录 一、Servlet核心接口和类 1、Servlet接口 2、GenericServlet抽象类 3、HttpServlet类 二、创建Servlet的三种方式 1、实现Servlet接口 2、继承GenericServlet抽象类 3、继承HttpServlet类 三、web.xml中其他配置 1、启动优先级&#xff1a; 2、url-pattern定…

【SpringCloud02】订单-支付微服务模块(支付模块构建)

1.微服务cloud整体聚合父工程Project New Project 聚合总父工程名字 Maven选版本 工程名字 字符编码 注解生效激活 Java编译版本选8 File Type过滤 2.父工程POM 2.1Pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi&quo…

docker中MySQL忘记登录密码找回方法

查看docker启动列表 docker ps 进入启动的mysql容器中 docker exec -it mysql /bin/bash 修改mysql配置文件 vim /etc/mysql/conf.d/docker.cnf 在最后添加 skip-grant-tables 如果出现命令没找到&#xff0c;则需要安装。 依次使用以下命令安装vim apt-get update apt…

java 系列文章之异常

文章目录一、概念二、异常分类1. Error2. Exception三、异常的处理方式四、Throw 和 throws 的区别1. 位置不同2. 功能不同总结一、概念 果某个方法不能按照正常的途径完成任务&#xff0c;就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时&a…

关于单行处理函数——ifnull()

我们先来看一个实例&#xff1a; 需求&#xff1a;在员工表emp中查看员工的年薪 分析&#xff1a;计算年薪除了月薪外补助也应该计算在内&#xff0c;所以年薪 (月薪 补助) * 12 sql语句&#xff1a;select ename,(sal comm) *12 as 年薪 from emp; …

SpringBoot+Vue项目在线拍卖系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

编译原理分析器大作业之字幕分析器

写这篇文章的主要目的呢是分享一下编译原理大作业——电影字幕分析器&#xff0c;分享一下我的做法&#xff0c;可能采用的做法不是特别好的用法&#xff0c;希望各位多多指点&#xff0c;觉得文章不错给点小赞赞喔!!! 题目介绍 写一个srt字幕解释器&#xff0c;需要分析单词…

动手深度学习-线性神经网络:线性回归

目录线性模型&#xff08;1&#xff09;度量模型质量-损失函数&#xff08;2&#xff09;更新模型以提高模型预测质量-随机梯度下降线性回归的从零开始实现线性回归的简洁实现参考教程&#xff1a;https://courses.d2l.ai/zh-v2/线性模型 定义&#xff1a;回归&#xff08;reg…

FFmpeg音频重采样API(libswresample)

目录 参考 lswr功能介绍 lswr使用说明 示例代码 \1. 参考 [1] FFmpeg/Libswresample Documentation [2] FFmpeg/Libswresample Detailed Description [3] FFmpeg/doc/examples/resampling_audio.c \2. lswr功能介绍 FFmpeg中重采样的功能由libswresample(后面简写为lswr…

代码随想录训练营第五十七天

1.回文子串 题647 ①dp数组含义 判断回文子串可以用头元素和尾元素是否相等的方式&#xff0c;设dp[i] [j]为[i,j]子串是否为回文子串&#xff0c;是则为true&#xff0c;否为false。 ②递推公式 若 s[i] s[j] &#xff0c;分三种情况&#xff1a;i j&#xff0c;即只有一…