数据结构测试题

news2024/9/25 19:22:32

目录

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;
}

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

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

相关文章

[c++] 继承和多态整理二

1 虚函数和纯虚函数 虚函数&#xff0c;之所以说是虚的&#xff0c;说的是在派生类中&#xff0c;可以覆盖基类中的虚函数&#xff1b;相对于虚函数来说&#xff0c;没有 virtual 修饰的函数可以叫做实函数&#xff0c;实函数就不能被覆盖。虚函数是实现多态的核心。虚函数和纯…

数据库技术基础 - 范式

第一范式 关系中的每一个分量必须是一个不可分的数据项。通俗地说&#xff0c;第一范式就是表中不允许有小表的存在。比如&#xff0c;对于如下的员工表&#xff0c;就不属于第一范式: 第二范式 实例 用一个单一的关系模式学生来描述学校的教务系统:学生(学号,学生姓名,系号,…

基础小白快速入门c语言--

变量&#xff1a; 表面理解&#xff1a;在程序运行期间&#xff0c;可以改变数值的数据&#xff0c; 深层次含义&#xff1a;变量实质上代表了一块儿内存区域&#xff0c;我们可以将变量理解为一块儿内存区域的标识&#xff0c;当我们操作变量时&#xff0c;相当于操作了变量…

.NET高级面试指南专题十二【 工厂模式介绍,工厂模式和抽象工厂模式的区别】

工厂模式是一种常用的创建型设计模式&#xff0c;它提供了一种创建对象的最佳方式&#xff0c;同时隐藏了创建对象的复杂性。工厂模式通过定义一个接口或抽象类来创建对象&#xff0c;但是将具体的对象实例化的过程延迟到子类中。这种模式可以根据需要返回子类的实例&#xff0…

PXE网络启动实战(第一篇 启动WinPE)

免责声明:文中有一些图片来源自网络,如有版权请通知我删除,谢谢! 目录 一、无盘站 二、PXE启动 三、PXE启动原理 四、启动WinPE 1、服务器准备 2、客户端 3、TFTP服务 4、WinPE选择 5、具体操作: 预告 一、无盘站 网络启动最早用于无盘系统,那时的电脑只配备软…

【软件测试】selenium元素定位方式大全!

前言 当我们在使用selenium进行自动化测试工作时&#xff0c;元素定位是非常重要的一环&#xff0c;因为我们是借助脚本模拟我们通过鼠标和键盘对元素进行点击、输入内容和滑动操作的&#xff0c;所以准确的元素定位是我们执行测试脚本的重要一环。本文就来给大家介绍一下sele…

3、皮卡丘代码审计(3)

一、命令/代码执行 基础知识 win系统 |不管A成功还是失败&#xff0c;两者都会执行&#xff0c;但只输出B的结果&不管A成功还是失败&#xff0c;两者都会执行&#xff0c;两者结果都会输出注意的是&#xff1a;&有可能会被当做分割参数的符号&#xff0c;导致没有出…

ceph性能测试

查看集群状态 ceph -s查看osd情况 ceph osd tree创建pg_num为60的pool&#xff0c;名为test。 ceph osd pool create test 60rados bench用于测试rados存储池底层性能&#xff0c;该工具可以测试写、顺序读、随机读三种类型 rados bench -p <pool_name> <seconds&…

springboot基于web的酒店客房管理系统论文

基于web的酒店客房管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了酒店客房管理系统的开发全过程。通过分析酒店客房管理系统管理的不足&#xff0c;创建了一个计算机管理酒店客房管理系统的方案。文…

LZO索引文件失效说明

在hive中创建lzo文件和索引时&#xff0c;进行查询时会出现问题.hive的默认输入格式是开启小文件合并的&#xff0c;会把索引也合并进来。所以要关闭hive小文件合并功能&#xff01;

Java多线程导出Excel示例

在之前的Java多线程导入Excel示例中演示了如何通过多线程的方式导入Excel&#xff0c;下面我们再来看下怎么通过多线程的方式导出Excel 还是直接上代码 首先是Controller import com.sakura.base.service.ExcelService; import org.springframework.beans.factory.annotation.…

Vue中如何实现条件渲染?

在Vue中实现条件渲染非常简单且灵活&#xff0c;主要通过Vue的指令来实现。在Vue中&#xff0c;我们可以使用v-if和v-else指令来根据条件来渲染不同的内容。下面就让我们通过一个简单的示例来演示如何在Vue中实现条件渲染&#xff1a; <!DOCTYPE html> <html lang&qu…

Unity安装与简单设置

安装网址&#xff1a;https://unity.cn 设置语言&#xff1a; 设置安装位置&#xff1a;否则C盘就会爆了 获取一个个人的资格证&#xff1a; 开始安装&#xff1a; 安装完毕。 添加模块&#xff1a;例如简体中文 新建项目&#xff1a; 布局2*3、单栏布局、 设置…

2024有哪些免费的mac苹果电脑深度清理工具?CleanMyMac X

苹果电脑用户们&#xff0c;你们是否经常感到你们的Mac变得不再像刚拆封时那样迅速、流畅&#xff1f;可能是时候对你的苹果电脑进行一次深度清理了。在这个时刻&#xff0c;拥有一些高效的深度清理工具就显得尤为重要。今天&#xff0c;我将介绍几款优秀的苹果电脑深度清理工具…

飞书文档批量导出

背景需求 最近所参与的项目即将结项&#xff0c;需要将飞书中的产品需求文档&#xff08;PRD&#xff09;交付给甲方&#xff0c;由于文档较多&#xff0c;大概有两百多个&#xff0c;一个一个的下载导出&#xff0c;太麻烦了&#xff08;PS&#xff1a;本人比较懒&#xff09;…

【MySQL】mvcc以及三个重要日志

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;【】数据库 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 MVCC关键概念&#xff1a; MVCC机制的优点&#xff1a; 三个重要的日志&#xff1a; 重做日志&#xff1a; 回滚日志&am…

智能汽车加速车规级存储应用DS2431P+TR 汽车级EEPROM 存储器IC

DS2431PT&R是一款1024位1-Wire EEPROM芯片&#xff0c;由四页存储区组成&#xff0c;每页256位。数据先被写入一个8字节暂存器中&#xff0c;经校验后复制到EEPROM存储器。该器件的特点是&#xff0c;四页存储区相互独立&#xff0c;可以单独进行写保护或进入EPROM仿真模式…

软考重点题解析-基础知识

1.加密技术&#xff1a;分为对称加密技术&#xff1a;文件的加密和解密使用相同的密钥 和 非对称加密技术&#xff1a;加密和解密不同的密钥&#xff0c;分别是公开密钥和私有密钥。 例题&#xff1a;若A,B两人分别在认证机构&#xff08;CA&#xff09;M,N处获得证书&…

修改centos7的dns解决docker拉取镜像超时问题

近期在一台centos7的服务器上部署系统&#xff0c;拉取docker镜像时总是超时&#xff0c;如图所示。网上有教程说&#xff0c;可以修改操纵系统的dns地址&#xff0c;试了一下&#xff0c;果然搞定。 打开dns配置文件 sudo vi /etc/resolv.conf发觉里面的地址设为114.114.114…

自动粘贴与网址管理,让您的网络生活更便捷!“

在数字化世界中&#xff0c;网址和文本信息的复制粘贴已成为我们日常操作中的家常便饭。然而&#xff0c;频繁的手动操作不仅效率低下&#xff0c;还容易出错。想象一下&#xff0c;如果能有一种工具&#xff0c;只需一键之触&#xff0c;就能自动完成粘贴和网址管理&#xff0…