数据结构测试题

目录

1.闰年判断

2.志愿者选拔 

3.单词接龙

4.对称二叉树 

5.英雄南昌欢迎您

6.时间转换

7.矩阵乘法

8. Huffuman树


1.闰年判断

题目描述:

给定一个年份,判断这一年是不是闰年。

当以下情况之一满足时,这一年是闰年:

1. 年份是4的倍数而不是100的倍数;

2. 年份是400的倍数。

其他的年份都不是闰年。

数据规模与约定1990 <= y <= 2050。

输入格式:

输入包含一个整数y,表示当前的年份。请在这里写输入格式。例如:输入在一行中给出2个绝对值不超过1000的整数A和B。

输出格式

输出一行,如果给定的年份是闰年,则输出yes,否则输出no。

输入样例:

2013
2016

输出样例:

no
yes

参考答案:

#include<iostream>
using namespace std;
void check(int year)
{
     if(year>=1990&&year<=2050)
    {
        if(year%4==0&&year%400!=0||year%400==0)
            cout<<"yes"<<endl;
        else cout<<"no"<<endl;
    }
}
int main()
{
    int a,b;cin>>a>>b;
    check(a),check(b);
}
2.志愿者选拔 

题目描述:

光明学院ACM赛事志愿者的选拔工作正在学院如火如荼地进行。为了选拔最合适的人才,学院对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。

现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。

输入格式:

第1行,两个整数n,m(5≤n≤5000,3≤m≤n),中间用一个空格隔开,其中n表示报名参加笔试的选手总数,m表示计划录取的志愿者人数。输入数据保证m*150%向下取整后小于等于n。

第2行到第n+1行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000≤k≤9999)和该选手的笔试成绩s(1≤s≤100)。数据保证选手的报名号各不相同。

输出格式:

第1行,有两个整数,用一个空格隔开,第1个整数表示面试分数线;第2个整数为进入面试的选手的实际人数。

从第2行开始,每行包括两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。

输入样例:

6    3    
1000    90
3239    88
2390    95
7231    84
1005    95
1001    88

输出样例:

88    5
1005    95
2390    95
1000    90
1001    88
3239    88

参考答案: 

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m;
struct node{
    int hao;
    int score;
    bool operator<(const node& L)const
    {
        return score>L.score||(score==L.score&&hao<L.hao);
    }
};
struct node ren[5005];
int main()
{
  cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        int hao,g;
        cin>>hao>>g;
        ren[i]={hao,g};
    }
    sort(ren,ren+n);
    int x=(int)(m*1.5);
    int xian=ren[x-1].score;
    int sum=0;
    cout<<xian;
    for(int i=0;i<n;i++)
    {
        if(ren[i].score>=xian) sum++;
    }
    cout<<' '<<sum<<endl;
    for(int i=0;i<n;i++)
        if(ren[i].score>=xian)
        cout<<ren[i].hao<<' '<<ren[i].score<<endl;
}
3.单词接龙

题目描述:

单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。

输入格式:

输入的第一行为一个单独的整数n(n<=20)表示单词数,以下n行每行有一个单词(只含有大写或小写字母,长度不超过20),输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在。

输出格式:

只需输出以此字母开头的最长的“龙”的长度。

输入样例:

5
at
touch
cheat
choose
tact
a

输出样例:

23

参考答案 :

#include<iostream>
#include<cstring>
using namespace std;
const int N=10005;
string all[N];
int n,book[N],sub[N][N],ans;
void dfs(string s,int u)
{
    int len=s.size();
    ans=max(ans,len);
    book[u]++;
    for(int i=1;i<=n;i++)
    {
        if(book[i]<2&&sub[u][i])
        {
            dfs(s+all[i].substr(sub[u][i]),i);
        }
    }
    book[u]--;
    return ;
}
int main()
{
    cin>>n;
   
    for(int i=1;i<=n;i++)
    {
        cin>>all[i];
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            string a=all[i],b=all[j];
            int lena=a.size(),lenb=b.size();
            int len=min(lena,lenb);
            for(int k=1;k<len;k++)
            {
                if(a.substr(a.size()-k,k)==b.substr(0,k))
                {
                    sub[i][j]=k;
                    break;
                }
            }
        } 
    char head;cin>>head;
   // cout<<head<<endl;
    for(int i=1;i<=n;i++)
        if(all[i][0]==head)
            dfs(all[i],i);
    cout<<ans;
    return 0;
}
4.对称二叉树 

题目描述:

如果二叉树的左右子树的结构是对称的,即两棵子树皆为空,或者皆不空,则称该二叉树是对称的。编程判断给定的二叉树是否对称。

例:如下图中的二叉树T1是对称的,T2是不对称的。

二叉树用顺序结构给出,若读到#则为空,二叉树T1=ABCDE,T2=ABCD#E,如果二叉树是对称的,输出“Yes”,反之输出“No”。

输入格式:

二叉树用顺序结构给出,若读到#则为空。

输出格式:

如果二叉树是对称的,输出“Yes”,反之输出“No”。

输入样例:

ABCDE

输出样例:

Yes

参考答案:

#include<iostream>
using namespace std;
int main()
{
    string s;cin>>s;
    int len=s.size();
    s[len]='#';
    int f=0;
    for(int i=1;i<len;i+=2)
    {
        if((s[i]=='#'&&s[i+1]!='#')||(s[i+1]=='#'&&s[i]!='#'))
           {
               f=1;
               break;
           }
    }
           if(f==1) cout<<"No";
            else cout<<"Yes";
}
5.英雄南昌欢迎您

题目描述:

南昌城是一个英雄城,也是一个旅游胜地,每年都有成千上万的人前来观光。为方便游客,公交公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴士线路。每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站。

一名旅客最近到南昌来旅游,他很想去滕王阁游玩,但如果从他所在的饭店没有一路巴士可以直接到达滕王阁,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士, 这样换乘几次后到达滕王阁。

现在用整数1,2,…N 给南昌城的所有的巴士站编号,约定这名旅客所在饭店的巴士站编号为1,滕王阁巴士站的编号为N。

写一个程序,帮助这名旅客寻找一个最优乘车方案,使他在从饭店乘车到滕王阁的过程中换车的次数最少。

输入格式:

第一行有两个数字M和N(1≤M≤100 1<N≤500),表示开通了M条单程巴士线路,总共有N个车站。从第二行到第M行依次给出了第1条到第M条巴士线路的信息。其中第i+1行给出的是第i条巴士线路的信息,从左至右按运行顺序依次给出了该线路上的所有站号相邻两个站号之间用一个空格隔开。

输出格式:

只有一行。如果无法乘巴士从饭店到达滕王阁,则输出"N0",否则输出你的程序所找到的最少换车次数,换车次数为0表示不需换车即可到达。

输入样例:

3 7
6 7
4 7 3 6
2 1 3 5

输出样例:

2

参考答案: 

#include<iostream>
#include<cstring>
using namespace std;
const int N=1005;
int e[N][N],dist[N],book[N],shuzi[N];
char s[N];
const int inf=0x3f3f3f3f;
int n,m;
void Dijkstra()
{
  book[1]=1;
    for(int i=1;i<=n;i++)
    {
        int min_=inf,u;
        for(int j=1;j<=n;j++)
        {
            if(book[j]==0&&dist[j]<min_)
            {
                min_=dist[j];
                u=j;
            }
        }
        book[u]=1;
        for(int j=1;j<=n;j++)
        {
            if(e[u][j]<inf&&dist[j]>dist[u]+e[u][j])
                dist[j]=dist[u]+e[u][j];
        }
    }
}
int main()
{
    cin>>m>>n;
    getchar();
     memset(e,0x3f,sizeof e);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(i==j) e[i][j]=0;
    int k=1;
    while(m--)
    {
        k=1;
        memset(shuzi,0,sizeof shuzi);
        memset(s,'\0',sizeof s);
        cin.getline(s,sizeof s);
        for(int i=0;i<strlen(s);i++)
        {
            if(isdigit(s[i]))
            {
               shuzi[k]=shuzi[k]*10+s[i]-'0';
            }
            else k++;
        }
       for(int i=1;i<k;i++)
           for(int j=i+1;j<=k;j++)
               e[shuzi[i]][shuzi[j]]=1;
        
    }
    for(int i=1;i<=n;i++)
    {
      dist[i]=e[1][i];
      book[i]=0;
    } 
        Dijkstra();
        if(dist[n]!=inf) cout<<dist[n]-1;
    else cout<<"NO";
}
6.时间转换

题目描述:

给定一个以秒为单位的时间t,要求用“<H>:<M>:<S> ”的格式来表示这个时间。<H>表示时间,<M>表示分钟,而<S>表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。

输入格式:

输入只有一行,是一个整数t(0<=t<=86399)。

输出格式:

输出只有一行,是以“<H>:<M>:<S> ”的格式所表示的时间,不包括引号。

输入样例1:

0

输出样例1:

0:0:0

输入样例2:

5436

输出样例2:

5436

参考答案:

#include<iostream>
using namespace std;
int main()
{
    int n;cin>>n;
    if(n==0)
    printf("0:0:0");
    else
    {
        int h=n/3600;
        int f=n/60-h*60;
        int m=n-h*3600-f*60;
        printf("%d:%d:%d",h,f,m);
    }
}
7.矩阵乘法

题目描述:

给定一个N阶矩阵A,输出A的M次幂(M是非负整数)

  例如:

  A =

  1 2

  3 4

  A的2次幂

  7 10

15 22

输入格式:

第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数

接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值

输出格式:

输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开

输入样例:

2 2
1 2
3 4

输出样例:

7 10
15 22

参考答案:

#include<iostream>
#include<cstring>
using namespace std;
const int N=105;
int a[N][N],b[N][N],c[N][N];
int main()
{
    int n,m;cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
   for(int i=1;i<=n;i++)
           c[i][i]=1;
    for(int i=1;i<=m;i++)
    {
        memset(b,0,sizeof b);
        for(int j=1;j<=n;j++)
            for(int j1=1;j1<=n;j1++)
                for(int j2=1;j2<=n;j2++)
                    b[j][j1]+=c[j][j2]*a[j2][j1];
         memcpy(c,b,sizeof b);
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
           cout<<c[i][j]<<' ';
           
        } 
        if(i<n)
        cout<<endl;
    }
}
8. Huffuman树

题目描述:

Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。

  给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:

  1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。

  2. 重复步骤1,直到{pi}中只剩下一个数。

  在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。

  本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

  例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:

  1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。

  2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。

  3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10, 17},费用为17。

  4. 找到{10, 17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。

  5. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。

输入格式:

输入的第一行包含一个正整数n(n<=100)。

接下来是n个正整数,表示p0, p1, …, pn-1,每个数不超过1000。

输出格式:

输出用这些数构造Huffman树的总费用。

输入样例:

5
5 3 8 2 9

输出样例:

59

参考答案: 

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int main()
{
    int n;cin>>n;
    int x;
    priority_queue<int,vector<int>,greater<int>> heap;
    for(int i=0;i<n;i++) 
    {
        cin>>x;heap.push(x);
    }
    int sum=0;
    while(heap.size()>1)
    {
        int a=heap.top();heap.pop();
        int b=heap.top();heap.pop();
        sum+=a+b;
        heap.push(a+b);
    }
    cout<<sum;
}

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

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

相关文章

VMwareWorkstation17.0搭建Windows98微软操作系统虚拟机(完整安装步骤·全网最详细图文教程)更新中

VMwareWorkstation17.0搭建Windows98微软操作系统虚拟机&#xff08;完整安装步骤全网最详细图文教程&#xff09; VMwareWorkstation17.0搭建Windows98微软操作系统虚拟机&#xff08;完整安装步骤全网最详细图文教程&#xff09;

使用mysqld --install命令时出现MSVCR120.dll文件丢失错误

Visual C 2013 and Visual C Redistributable Package https://support.microsoft.com/en-us/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package 进去之后先找到自己的版本&#xff0c;x64还是x86&#xff0c;下载 vcredit &#xff0c;进行安装即…

Mybatis | 动态SQL

目录: 动态SQL中的 “元素” :\<if>元素\<choose>、\<when>、\<otherwise>元素\<where>、\<trim>元素\<set>元素\<foreach>元素\<bind>元素 作者简介 &#xff1a;一只大皮卡丘&#xff0c;计算机专业学生&#xff0c;正…

编写dockerfile挂载卷

编写dockerfile文件 [rootwq docker-test-volume]# vim dockerfile1 [rootwq docker-test-volume]# cat dockerfile1 FROM centosVOLUME ["volume01","volume02"]CMD echo "------end------" CMD /bin/bash [rootwq docker-test-volume]#使用do…

使用Spark探索数据

需求分析 使用Spark来探索数据是一种高效处理大规模数据的方法&#xff0c;需要对数据进行加载、清洗和转换&#xff0c;选择合适的Spark组件进行数据处理和分析。需求分析包括确定数据分析的目的和问题、选择合适的Spark应用程序和算法、优化数据处理流程和性能、可视化和解释…

Qt 简约又简单的加载动画 第七季 音量柱风格

今天和大家分享两个音量柱风格的加载动画,这次的加载动画的最大特点就是简单,只有几行代码. 效果如下: 一共三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc…

【一竞技】DOTA2-梦幻联赛S22:XG战队 2-1击败 Spirit

在3月1日晚上进行的梦幻联赛第二阶段小组赛上,XG 战队以2-1 击败Spirit战队。双方对阵第三场决胜局:XG前中期优势,冰连续控盾压制最终拿下了比赛胜利,以下是对决战报。 XG战队在天辉,阵容是小狗、火女、人马、墨客、凤凰。Spirit战队在夜魇,阵容是斯温、火枪、龙骑、白虎、飞机…

14.最长公共前缀

题目&#xff1a;编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串""。 解题思路&#xff1a;横向扫描&#xff0c;依次遍历每个字符串&#xff0c;更新最长公共前缀。另一种方法是纵向扫描。纵向扫描时&#xff0c;从前…

Windows命令行工具和PowerShell介绍

Windows命令行工具和PowerShell是两种不同的文本界面命令解释器&#xff0c;它们在Windows操作系统中用于执行各种操作和管理任务。虽然它们都可以用于执行命令和脚本&#xff0c;但它们之间存在着一些区别和特点。 1. Windows命令行工具&#xff08;Cmd.exe&#xff09; …

Flutter开发之CupertinoApp

Flutter开发之CupertinoApp 最近由于使用Flutter编程更多&#xff0c;使用Flutter更顺手&#xff0c;相对于其他前端框架来说&#xff0c;Flutter在跨平台、响应式UI、自绘引擎、即插即用的组件和庞大的社区生态支持方面有更大的优势&#xff1b;Flutter拥有更低的学习成本&am…

elegentbook模板不生成目录的解决方法

这里只有目录两个字、却没有生成目录 在json里面修改 "latex-workshop.latex.autoClean.run": "onBuilt",把onBuilt改为onFailed即可 "latex-workshop.latex.autoClean.run": "onFailed",

cetos7 Docker 安装 gitlab

一、gitlab 简单介绍和安装要求 官方文档&#xff1a;https://docs.gitlab.cn/jh/install/docker.html 1.1、gitlab 介绍 gitLab 是一个用于代码仓库管理系统的开源项目&#xff0c;使用git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务平台&#xff0c;通过该平…

idea中maven配置(一次成功,全部细节都有)

写这篇文章的原因是maven的配置很简单&#xff0c;但是也很容易出错&#xff0c;我连配了两台电脑的maven出现了各种小错误&#xff0c;参考了以下两篇博文IDEA配置Maven教程&#xff08;超详细版~)_idea maven配置教程-CSDN博客 一次包会——最新IDEA配置Maven指南&#xff0…

Oracle dbms_output基本使用2

以前曾使用过Oracle dbms_output&#xff0c;继续熟悉&#xff1b; 执行如下一句&#xff0c;报告错误&#xff0c; 必须放到begin...end里面&#xff1b; 上图也没有把文字输出&#xff0c;因为默认没有开启控制台显示&#xff1b;如下图就输出了文字&#xff0c; put&#x…

python:pyecharts 画基金净值 月K线图

pip install pyecharts1.9.1 pyecharts-1.9.1-py3-none-any.whl 我想在本地&#xff08;PC) 画出 基金净值 月K线图&#xff0c;不想每次看图都需联网。 cd my_dir mkdir echarts cd echarts curl -O https://assets.pyecharts.org/assets/echarts.min.js 修改一下开源代码 …

设计模式——中介者模式(mediator pattern)

概述 如果在一个系统中对象之间的联系呈现为网状结构&#xff0c;如下图所示。对象之间存在大量的多对多联系&#xff0c;将导致系统非常复杂&#xff0c;这些对象既会影响别的对象&#xff0c;也会被别的对象所影响&#xff0c;这些对象称为同事对象&#xff0c;它们之间通过彼…

怎样才算是软件测试中搭建测试环境?

测试环境是QA做好检测运行的前提条件。平稳和可控的测试环境&#xff0c;能够使测试人员在实行测试用例时不用花费额外的时间去维护。有一些企业运维或是研发部会帮忙准备好测试环境&#xff0c;可是QA要是一味依赖别的部门&#xff0c;会局限检测运行的做好。 一、什么是测试…

游戏科技:超越娱乐的界限

12月25日&#xff0c;国家新闻出版署在节日前夕推出令业内人士振奋的好消息——本次共有105款国产网络游戏通过审批&#xff0c;获得版号&#xff0c;这不仅数量超过了历史新高&#xff0c;更使业内人士看到政策回暖的希望。 这105款游戏覆盖多家知名游戏企业&#xff0c;其中不…

vue3+vite 项目的创建

这里要提醒一下&#xff0c;如果我们要使用 vue3 的组合式api 的写法的话&#xff0c; 那么我们使用的 vue 版本不能低于 vue3.2 版本&#xff0c;不能低于 vue3.2 版本&#xff0c;不能低于 vue3.2 版本 vue2 已停止维护了&#xff0c; 现在全面拥抱vue3 之前用 vue-cli 创建…

线程池学习

github看到一个项目&#xff08;GitHub - markparticle/WebServer: C Linux WebServer服务器&#xff09;&#xff0c;内部使用的一个线程池看着不错&#xff0c;拿来学习一下。 /** Author : mark* Date : 2020-06-15* copyleft Apache 2.0*/ #ifndef THREADPO…