第十六次CCF计算机软件能力认证

news2024/11/18 13:35:20

第一题:小中大

在数据分析中,最小值最大值以及中位数是常用的统计信息。

老师给了你 n 个整数组成的测量数据,保证有序(可能为升序或降序),可能存在重复的数据。

请统计出这组测量数据中的最大值、中位数以及最小值,并按照从大到小的顺序输出这三个数。

输入格式

第一行输入一个整数 n。

第二行中存在 n 个有序的整数,表示测量数据,可能为升序或降序排列,可能存在连续多个整数相等,整数与整数之间使用空格隔开。

输出格式

包含一行,包括最大值、中位数以及最小值共三个数,并按照从大到小的顺序输出。

数据与数据之间使用空格隔开。

对于整数请直接输出整数,对于可能出现的分数,请输出四舍五入保留 1 位小数的结果。

数据范围

测试点n测量数据的绝对值测量数据是否均相同
1,2≤1e3≤1e7
3,4,5,6≤1e3≤1e7
7,8≤1e5≤1e7
9∼20≤1e5≤1e7

输入样例1:

3
-1 2 4

输出样例1:

4 2 -1

样例1解释

4 为最大值,2 为中位数,−1 为最小值。

输入样例2:

4
-2 -1 3 4

输出样例2:

4 1 -2

样例2解释

4 为最大值,(−1+3)÷2=1 为中位数,−2 为最小值。

#include<iostream>

using namespace std;

const int N = 1e5 + 10;
int n;
int a[N];
int _max = -0x3f3f3f3f , _min = 0x3f3f3f3f;

int main()
{
    cin >> n;
    for(int i = 0;i < n;i ++) cin >> a[i] , _max = max(_max , a[i]) , _min = min(_min , a[i]);
    double x = 0;
    if(n & 1) x = a[n / 2];
    else x = (a[n / 2] + a[n / 2 - 1]) * 1.0 / 2;
    
    if((int)x == x)printf("%d %d %d" , _max , (int)x , _min);
    else printf("%d %.1lf %d" ,_max , x , _min);
    return 0;
}

 

n = int(input())
l = list(map(int , input().split()))
x = 0
if n & 1:
    x = l[n // 2]
else:
    x = (l[n // 2 - 1] + l[n // 2]) / 2
print(max(l) , end = ' ')
if int(x) == x:
    print(int(x) , end = ' ')
else:
    print("%.1lf" %(x) , end = ' ')
print(min(l))

第二题:二十四点

二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4 张纸牌上数字的运算结果为 24。

定义每一个游戏由 4 个从 1−9 的数字和 3 个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。

其中加法用符号 + 表示,减法用符号 - 表示,乘法用小写字母 x 表示,除法用符号 / 表示。

在游戏里除法为整除(向下取整),例如 2/3=0,3/2=1,4/2=2,−3/7=−1。

老师给了你 n 个游戏的解,请你编写程序验证每个游戏的结果是否为 24。

输入格式

第一行输入一个整数 n。

从第 2 行开始到第 n+1 行中,每一行包含一个长度为 7 的字符串,为上述的 24 点游戏,保证数据格式合法。

输出格式

包含 n 行,对于每一个游戏,如果其结果为 24 则输出字符串 Yes,否则输出字符串 No

数据范围

 QQ截图20210222104224.png

 

QQ截图20210222104224.png

输入样例:

10
9+3+4x3
5+4x5x5
7-9-9+8
5x6/5x4
3+5+7+9
1x1+9-9
1x9-5/9
8/5+6x9
6x7-3x6
6x4+4/5

输出样例:

Yes
No
No
Yes
Yes
No
No
No
Yes
Yes

样例解释

9+3+4×3=24
5+4×5×5=105
7-9-9+8=-3
5×6/5×4=24
3+5+7+9=24
1×1+9-9=1
1×9-5/9=9
8/5+6×9=55
6×7-3×6=24
6×4+4/5=24

 

解题思路: 

使用python的eval函数进行求解

for _ in range(int(input())):
    s = input()
    s = s.replace("x" , "*")
    s = s.replace("/" , "//")
    if eval(s) == 24:
        print("Yes")
    else:
        print("No")

第三题:损坏的RAID5(这一次的最难的)

大模拟

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

typedef unsigned int UI;
const int N = 1010, M = 40 * 1024 * 8 + 10;

int n, s, l;
UI disk[N][M / 8];
bool st[N];
char str[M];
int len;

inline UI get(char c)
{
    if (c <= '9') return c - '0';
    return c - 'A' + 10;
}

inline char get(UI x)
{
    if (x <= 9) return x + '0';
    return x - 10 + 'A';
}

inline string u2s(UI x)
{
    string res;
    for (int i = 7; i >= 0; i -- )
        res += get(x >> (i << 2) & 15);
    return res;
}

inline int get_real_col(int r, int c)
{
    r %= n;
    r = n - 1 - r;
    return (r + 1 + c) % n;
}

int main()
{
    scanf("%d%d%d", &n, &s, &l);
    for (int u = 0; u < l; u ++ )
    {
        int k;
        scanf("%d", &k);
        getchar();
        fgets(str, M, stdin);
        int sz = strlen(str) - 1;
        for (int i = 0; i < sz; i += 8)
        {
            UI x = 0;
            for (int j = 0; j < 8; j ++ )
                x = (x << 4) + get(str[i + j]);
            disk[k][i >> 3] = x;
        }
        st[k] = true;
        len = max(len, sz >> 3);
    }

    int m;
    scanf("%d", &m);
    while (m -- )
    {
        int b;
        scanf("%d", &b);
        if (b >= len * (n - 1)) puts("-");
        else
        {
            int k = b / s;
            int row = k / (n - 1), col = get_real_col(row, k % (n - 1));
            int r = row * s + b % s;
            if (st[col])
                puts(u2s(disk[col][r]).c_str());
            else if (l == n - 1)
            {
                UI x = 0;
                for (int i = 0; i < n; i ++ ) x ^= disk[i][r];
                puts(u2s(x).c_str());
            }
            else puts("-");
        }
    }
    return 0;
}。

第四题:消息传递接口

解题思路:使用队列进行模拟,信息传递接口

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <sstream>

using namespace std;

const int N = 10010;

int n;
struct Op
{
    // 0代表S 1代表R -1代表等待
    int p, id;
};
queue<Op> q[N];
bool st[N];// 判断该进程是否在等待

// 功能: PD pid进程当前指令能否执行完毕, 目前pid执行到{!type, oid}, 即期望对方是type
bool dfs(int p, int id, int pid)
{
    // 若等待的对方也在等待,则死锁
    if (st[id]) return false;
    st[id] = true;
    
    // 对方进入等待队列
    while (q[id].size())
    {
        auto t = q[id].front();
        
         // 如果对方等的那个刚刚好是自己,且刚刚好是自己所期待的
        if (t.p == p && t.id == pid)
        {
            st[id] = false;
            q[id].pop();
            return true;
        }
        // PD 对方当前指令能否完成
        else if (dfs(t.p ^ 1, t.id, id)) q[id].pop();
        else return false;
    }
    st[id] = false;
    return p == -1;
}

int main()
{
    int T;
    cin >> T >> n;
    getchar();
    while (T -- )
    {
        string str;
        for (int i = 0; i < n; i ++ )
        {
            st[i] = false;
            q[i] = queue<Op>();
            getline(cin, str);
            stringstream ssin(str);
            while (ssin >> str)
                if (str[0] == 'S') q[i].push({0, stoi(str.substr(1))});
                else q[i].push({1, stoi(str.substr(1))});
        }

        // 添加一个-1进程,等待所有0~n-1进程执行完
        bool success = true;
        for (int i = 0; i < n; i ++ )
            if (!dfs(-1, i, -1))
            {
                success = false;
                break;
            }
        if (success) puts("0");
        else puts("1");
    }
    return 0;
}

第五题:317号子问题

经典的图论问题(SPFA 或 迪杰斯特拉)

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>

using namespace std;
const int N = 1e4 + 10 , M = 2e5 + 10 , INF = 0x3f3f3f3f;
typedef pair<int , int>PII;
int h[M] , ne[M] , w[M] , e[M] , idx;

void add(int a , int b , int c)
{
    e[idx] = b , w[idx] = c , ne[idx] = h[a] , h[a] = idx ++;
}
int solor[N];
int n , m , k;
bool st[N];
int dist[N] , cnt = 0;
int d[N][1010];

void dij(int s)
{
    memset(dist , 0x3f , sizeof dist);
    memset(st , 0 , sizeof st);
    dist[s] = 0;
    priority_queue<PII , vector<PII> , greater<PII>>q;
    q.push({0 , s});
    
    while(!q.empty())
    {
        auto t = q.top();
        q.pop();
        
        int x = t.second;
        if(st[x]) continue;
        st[x] = true;
        
        for(int i = h[x];~i;i = ne[i])
        {
            int j = e[i];
            if(dist[j] > dist[x] + w[i])
            {
                dist[j] = dist[x] + w[i];
                q.push({dist[j] , j});
            }
        }
    }
    
    for (int i = 1; i <= n; i ++ ) d[i][cnt] = dist[i];
}

void spfa(int start)
{
    int hh = 0, tt = 1;
    memset(dist, 0x3f, sizeof dist);
    int q[N];
    q[0] = start, dist[start] = 0;
    while (hh != tt)
    {
        int t = q[hh ++ ];
        if (hh == N) hh = 0;
        st[t] = false;

        for (int i = h[t]; ~i; i = ne[i])
        {
            int j = e[i];
            if (dist[j] > dist[t] + w[i])
            {
                dist[j] = dist[t] + w[i];
                if (!st[j])
                {
                    q[tt ++ ] = j;
                    if (tt == N) tt = 0;
                    st[j] = true;
                }
            }
        }
    }

    for (int i = 1; i <= n; i ++ ) d[i][cnt] = dist[i];
}

int main()
{
    memset(h , -1 , sizeof h);
    scanf("%d %d %d" ,&n ,&m ,&k);
    
    for(int i = 1;i <= n;i ++)
        scanf("%d" ,&solor[i]);
        
    while(m --)
    {
        int a , b , c;
        scanf("%d %d %d" ,&a ,&b ,&c);
        add(a , b , c) , add(b , a , c);
    }
    
    for(int i = 1;i <= n;i ++)
        if(solor[i])
        {
            // dij(i);
            spfa(i);
            cnt ++;
        }
    
    for(int i = 1;i <= n;i ++)
    {
        sort(d[i] , d[i] + cnt);
        int res = 0;
        
        for(int j = 0;j < cnt && j < k;j ++)
            if(d[i][j] != INF) res += d[i][j];
            else break;
        
        printf("%d\n" , res);
    }
    return 0;
}

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

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

相关文章

【数据结构】‘双向链表’冲冲冲

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

【雕爷学编程】Arduino动手做(199)---8x32位WS2812B全彩屏模块6

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

git 报错 protocol ‘https‘ is not supported解决

报错原因&#xff1a;选择不了其他分支代码&#xff0c;甚至都看不到其他分支&#xff0c;我这边解决了两次报错&#xff0c;情况如下&#xff1a; 第一种报错&#xff1a; idea中刷新分支报错如下&#xff1a; Fetch Failed protocol https is not supported 话不多说&#…

echats词云无法显示空白问题解决

<script src"https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/echarts.min.js"></script> <script src"https://oisanjavax.github.io/echarts-wordcloud/dist/echarts-wordcloud.min.js"></script>展示为空 原因为导入版本过高不…

如何共享笔记本电脑网络

为了让手机连接笔记本网络&#xff0c;我们通常通过在笔记本上安装诸如WiFi共享精灵来实现&#xff0c;其实没有那么麻烦&#xff1a; 1、在电脑上打开“设置”—>选择“网络和Internet”—>选择“移动热点”&#xff08;如果系统是Windows 7或更低版本&#xff0c;则需要…

Ansible从入门到精通【六】

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 专栏名称&#xff1a;Ansible从入门到精通 立志成为ansible大佬 ansible templates 模板&#xff08;templa…

机器学习复习题

1 单选题 ID3算法、C4.5算法、CART算法都是&#xff08; &#xff09;研究方向的算法。 A . 决策树 B. 随机森林 C. 人工神经网络 D. 贝叶斯学习 参考答案&#xff1a;A &#xff08; &#xff09;作为机器学习重要算法之一&#xff0c;是一种利用多个树分类器进行分类和预测…

【交换排序】冒泡排序 与 快速排序

交换排序基本思想&#xff1a; 所谓交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0c;交换排序的特点是&#xff1a;将键值较大的记录向序列的尾部移动&#xff0c;键值较小的记录向序列的前部移动。 目录 1.冒泡排序 2.快…

Day 76:通用BP神经网络 (3. 综合测试)

1 代码&#xff1a; package dl;import java.util.Arrays;/*** Full ANN with a number of layers.** author Fan Min minfanphd163.com.*/ public class FullAnn extends GeneralAnn {/*** The layers.*/AnnLayer[] layers;/*********************** The first constructor.*…

Python爬虫——selenium的安装和基本使用

1.什么是selenium&#xff1f; selenium是一个用于web应用程序测试的工具selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样支持通过各种driver&#xff08;FrifoxDriver&#xff0c;ItenrentExploreDriver&#xff0c;OperaDriver&#xff0c;ChromeDrive…

【linux开发基础知识】

基础--图形界面 基础--终端 基础-用户/组 基础-目录 基础-文件 Shell-基础 Shell-参数 Shell-if Shell-while/for Shell-until/case Shell-函数 Shell-正则表达式 Shell-常用命令 开发-svn 开发-编辑(vim) 开发-编译 开发-调试 开发-部署 建议 ● http://linux.vbir…

海外应用商店关键词优化之如何提高应用可见度

应用商店关键词优化是确保用户可以在Google Play和Apple应用商店中找到我们应用的重要一步。我们需要选择正确的关键词&#xff0c;将它们放在正确的位置&#xff0c;并合并一系列不同的关键词&#xff0c;同时确保拥有良好的转化率。 1、了解当前的元数据是关键字选择的第一步…

selenium环境搭建

文章目录 1、下载谷歌浏览器2、下载谷歌驱动 1、下载谷歌浏览器 浏览器下载完成后&#xff0c;在任务管理器中禁止浏览器的自动更新。因为驱动版本必须和浏览器一致&#xff0c;如果浏览器更新了&#xff0c;驱动就用不起了。 2、下载谷歌驱动 谷歌驱动需要和谷歌浏览器版本…

Eigen在QT中的配置

Eigen简介 Eigen支持包括固定大小、任意大小的所有矩阵操作&#xff0c;甚至是稀疏矩阵&#xff1b;支持所有标准的数值类型&#xff0c;并且可以扩展为自定义的数值类型&#xff1b;支持多种矩阵分解及其几何特征的求解&#xff1b;它不支持的模块生态系统提供了许多专门的功能…

浏览器自动访问打开网址的软件小工具模拟测试

用微软框架写了个浏览器自动访问和打开网址的工具&#xff0c;进行测试模拟&#xff1a; 1、获取链接方式&#xff0c;可通过API接口返回JSON链接格式&#xff0c;也可以集成到文档手动录入链接由软件进行循环运行。 2、配置一些参数&#xff1a;数量、次数、时间间隔等 看下演…

常用dbGet命令

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f;拾陆楼知识星球入口 Examples of dbGet Command 1. Find the top name of the design dbGet top.name 2. Get all the attributes of a selected object dbGet selected.?? If you press tab key…

华为OD机试真题 Java 实现【判断字符串子序列】【2023 B卷 100分】,倒序遍历

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

智汇云舟入选IDC《中国智慧城市数字孪生技术评估,2023》报告

8月7日&#xff0c;国际数据公司&#xff08;IDC&#xff09;发布了《中国智慧城市数字孪生技术评估&#xff0c;2023》报告。智汇云舟凭借在数字孪生领域的创新技术与产品&#xff0c;入选《2023中国数字孪生城市技术提供商图谱》。 报告通过公开征集的形式进行申报&am…

PCkit3如何刷固件

PCkit3如何刷固件 一般在MAPLAB安装时&#xff0c;在安装路径下面都会自带所有烧写器的固件包&#xff0c;找到对应的固件包利用MPLAB进行刷新就行了&#xff0c;具体步骤如下&#xff1a; 首先打开MPLAB软件&#xff0c;然后Programmer->Settings…然后点击configuration …

线程控制+线程tid+线程局部存储+线程私有栈

线程控制函数 今天学习的都是linux线程库中的函数。<pthread.h> pthread_creat()创建线程 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 参数 thread:返回线程IDattr:设置线程的属性&…