【天梯赛集训】7.17习题集

news2025/2/21 2:53:22

 AC: 12 / 12

用时:2 h 21 min

没卡思路,卡了几个测试点。

7-1 输入输出整数

 

#include <iostream>

using namespace std;

int main()
{
    int a;
    
    cin >> a;
    cout << a;
    
    return 0;
}

7-2 调整数组使奇数全部都位于偶数前面其他数字顺序不变

 

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s, a;
    
    cin >> s;
    
    int len = s.size();
    for(int i = 0; i < len; i++)
    {
        if(s[i] % 2 == 0) a += s[i];
        else cout << s[i];
    }
    
    cout << a << endl;
    
    return 0;
}

逐一读取字符,奇数直接输出,偶数存入字符串a中,最后输出字符串a即可。

7-3 判断回文字符串

 

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;

    cin >> s;

    int l = 0, r = s.size() - 1;

    bool flag = true;
    while(l < r)
    {
        if(s[l] != s[r])
        {
            flag = false;
            break;
        }
        l++, r--;
    }

    cout << (flag ? "YES, " : "NO, ") << (int)s.size() << endl;

    return 0;
}

头尾指针l和r,向中间逐个字符读取,一旦判假则退出循环,循环结束。

注意while循环条件为l <= r即可。

7-4 神密的数列

 

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

const int N = 110;
int a[N];

int dfs(int x)
{
    if(a[x]) return a[x]; //a[x] != 0说明此项已求出

    return a[x] = 2 * dfs(x - 1) - dfs(x - 2) + 1;
}

int main()
{
    int t;
    cin >> t;

    a[1] = 1;
    a[2] = 2;

    while(t--)
    {
        int n;
        cin >> n;

        cout << dfs(n) << endl;
    }

    return 0;
}

两个等差数列式子得出二阶等差数列通项,初始化前两项,递归即可。

 7-5 杨辉三角

 

#include <iostream>
#include <string>

using namespace std;

int g[20][20];

int main()
{
    int n;
    cin >> n;

    if(n == 1) printf("   1");
    else
    {
        printf("   1\n   1   1\n");
        if(n > 2)
        {
            g[2][1] = g[2][2] = 1;
            for(int i = 3; i <= n; i++)
            {
                g[i][1] = g[i][i] = 1;
                for(int j = 1; j <= i; j++)
                {
                    if(j == 1 || j == i) printf("   1");
                    else
                    {
                        g[i][j] = g[i - 1][j - 1] + g[i - 1][j];
                        printf("%4d", g[i][j]);
                    }
                }
                puts("");
            }
        }
    }
    return 0;
}

初始化前两行,从第三行开始,每行首尾均为1,中间每个数字由上一行两个数字相加得到。

7-6 九连环问题

 

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

const int N = 20;
bool st[N]; //false表示处于装上的状态,true表示处于卸下的状态

void dfs(int x, char op) //给x号环进行op操作
{
    if(x == 1) //1号环任意装卸
    {
        printf("%d: %c\n", x, op);
        if(op == 'U') st[x] = false;
        else st[x] = true;

        return;
    }

    //非1号环,检查是否能直接装卸
    bool flag = true;
    if(st[x - 1] == true) flag = false;
    else
    {
        for(int i = x - 2; i >= 1; i--)
        {
            if(st[i] == false)
            {
                flag = false;
                break;
            }
        }
    }

    if(flag)
    {
        printf("%d: %c\n", x, op);
        if(op == 'U') st[x] = false;
        else st[x] = true;
    }
    else //如果不能,则从后往前依次处理,直到x号环可以装卸
    {
        if(st[x - 1] == true) dfs(x - 1, 'U');

        for(int i = x - 2; i >= 1; i--)
        {
            if(st[i] == false)
            {
                dfs(i, 'D');
            }
        }

        printf("%d: %c\n", x, op);
        if(op == 'U') st[x] = false;
        else st[x] = true;
    }
}

int main()
{
    int n;
    char ch;

    cin >> n >> ch;

    if(ch == 'U')
    {
        memset(st, true, sizeof st);
        for(int i = n; i >= 1; i--)
        {
            if(st[i] == true) dfs(i, 'U');
        }
    }
    else
    {
        for(int i = n; i >= 1; i--)
        {
            if(st[i] == false) dfs(i, 'D');
        }
    }

    return 0;
}

参考汉诺塔问题,递归。

7-7 判断上三角矩阵

 

#include <iostream>
#include <string>

using namespace std;

int g[20][20];

int main()
{
    int n;
    cin >> n;

    while(n--)
    {
        int t;
        cin >> t;

        for(int i = 1; i <= t; i++)
            for(int j = 1; j <= t; j++)
                cin >> g[i][j];

        bool flag = true;
        for(int i = 2; i <= t && flag; i++)
            for(int j = 1; j <= i - 1; j++)
            {
                if(g[i][j] != 0)
                {
                    flag = false;
                    break;
                }
            }

        cout << (flag ? "YES" : "NO") << endl;
    }

    return 0;
}

 从第二行(如果有)开始判断即可。

7-8 考试座位号

 

#include <iostream>
#include <string>
#include <cstring>
#include <map>

using namespace std;

const int N = 110;

int n, m;
map<int, string> shiji;
map<string, int> kaoshi;

int main()
{
    scanf("%d", &n);

    while(n--)
    {
        string a;
        int b, c;

        cin >> a >> b >> c;
        shiji[b] = a;
        kaoshi[a] = c;
    }

    scanf("%d", &m);

    while(m--)
    {
        string a;
        int b, c;
        cin >> b;

        a = shiji[b];
        c = kaoshi[a];

        cout << a << ' ' << c << endl;
    }

    return 0;
}

 两个map容器即可。

7-9 吉老师的回归 

 

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

const int N = 110;

int n, m;

int main()
{
    scanf("%d%d", &n, &m);
    getchar();

    string s;
    while(n--)
    {
        getline(cin, s);

        if(s.find("easy") != s.npos || s.find("qiandao") != s.npos)
        {
            continue;
        }

        if(m == 0)
        {
            cout << s << endl;
            break;
        }

        m--;
    }

    if(n == -1) puts("Wo AK le");

    return 0;
}

注意判断当前已做题目数量和m关系的代码位置,测试点2答案错误的代码如下:

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

const int N = 110;

int n, m;

int main()
{
    scanf("%d%d", &n, &m);
    getchar();

    string s;
    while(n--)
    {
        getline(cin, s);

        if(m == 0)
        {
            cout << s << endl;
            break;
        }

        if(s.find("easy") != s.npos || s.find("qiandao") != s.npos)
        {
            continue;
        }
        else m--;
    }

    if(n == -1) puts("Wo AK le");

    return 0;
}

7-10 病人排队

 

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

const int N = 110;

struct Node
{
    string id;
    int year;
    int order;
    bool isOld;
}node[N];

int n;

bool cmp(Node a, Node b)
{
    if(a.isOld == b.isOld)
    {
        if(a.isOld == true)
        {
            if(a.year != b.year) return a.year > b.year;
            else return a.order < b.order;
        }
        else return a.order < b.order;
    }
    else return a.isOld > b.isOld;
}

int main()
{
    scanf("%d", &n);

    for(int i = 0; i < n; i++)
    {
        string a;
        int b;
        bool c = false;

        cin >> a >> b;

        if(b >= 60) c = true;

        node[i] = {a, b, i, c};
    }

    sort(node, node + n, cmp);

    for(int i = 0; i < n; i++) cout << node[i].id << endl;

    return 0;
}

 根据题目要求写好cmp比较函数然后sort,依次打印id即可。

7-11 黑洞数

 

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main()
{
    string s;
    cin >> s;

    int a, b, c;

    for(int i = 1; ; i++)
    {
        sort(s.begin(), s.end());
        b = stoi(s);

        reverse(s.begin(), s.end());
        a = stoi(s);

        c = a - b;
        printf("%d: %d - %d = %d\n", i, a, b, c);
        if(c == 495) break;
        else s = to_string(c);
    }

    return 0;
}

 善用字符串和整型互相转换的函数即可。

7-12 h0034. 平方矩阵 II

 

 

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

const int N = 110;

int g[N][N];

int main()
{
    int n;

    for(int i = 1; i <= 100; i++)
    {
        for(int j = i; j >= 1; j--)
            g[i + 1 - j][i] = g[i][i + 1 - j] = j;
    }

    while(scanf("%d", &n), n)
    {
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                printf("%d ", g[i][j]);
            }
            puts("");
        }
        puts("");
    }

    return 0;
}

先预处理好100阶的矩阵,然后根据要求打印即可。

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

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

相关文章

Anaconda的python虚拟环境中安装cudatoolkit和cudnn加速tensorflow

1. 背景 由于本地安装了cuda 10.0, 但是现在需要在Anaconda中安装不同的python虚拟环境来安装tensorflow-gpu、对应的cudatoolkit、对应的cudnn来加速&#xff0c;下面是具体的演示流程 2. 安装 我这里以安装tensorflow-gpu1.9.0为例&#xff0c;首先进入python的虚拟环境&a…

多元函数的混合偏导数

定理&#xff1a;多元函数的混合导数相等。 直接看图&#xff1a; 引自知乎&#xff1a;点击跳转知乎链接

IIS部署WCF的文件夹要加上IIS_USERS的权限

弯路1&#xff0c;文件夹没加权限报错&#xff1a; 报错如图&#xff1a; 弯路2&#xff1a;多网卡多IP&#xff0c;要设置固定IP。样式&#xff1a; http://192.168.1.4:8080/Service1.svc

RabbitMQ实现六类工作模式

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; RabbitMQ实现六类工作模式 ⏱️ 创作时间&#xff1a; 2023年07月20日…

Jenkins持续集成自动化测试

目录 执行集成构建 持续&#xff0c;自动地构建&测试软件项目代码管理&#xff08;git/svn&#xff09;>编译&#xff08;maven/ant/gradle&#xff09;>打包>测试环境部署>自动化测试 研发体系中的迭代流程 1 源码分支管理&#xff1a; git或者svn, 将不同开…

C++基础与深度解析02——

0. 前言 接上文C基础与深度解析01&#xff0c;本篇主要介绍C的输入输出流&#xff0c;如下 1. 基础概念 1.1头文件 通常&#xff0c;在一个 C 程序中&#xff0c;只包含两类文件—— .cpp 文件和 .h 文件。其中&#xff0c;.cpp 文件被称作 C 源文件&#xff0c;里面放的都是…

【C++】STL——vector的有关空间的函数介绍和使用、size和capacity函数、resize和reserve函数

文章目录 1.vector的使用2.vector空间增长问题&#xff08;1&#xff09;size 获取数据个数&#xff08;2&#xff09;capacity 获取容量大小&#xff08;3&#xff09;empty 判断是否为空&#xff08;4&#xff09;resize 改变vector的size&#xff08;5&#xff09;reserve 改…

Alvas.Audio v2019 Crack

Alvas.Audio v2019 Crack 该库使C#和VB.Net程序员能够创建执行&#xff08;包括混合声音信息&#xff09;、捕获、转换和编辑音频的应用程序。 阿尔瓦斯。音频是C#音乐库。网络程序员。 这使你能够生产。NET程序&#xff0c;例如Winforms/WPF/Windows服务/控制台录音机、Int…

❤️创意网页:使用CSS和HTML创建令人惊叹的3D立方体

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

经典文献阅读之--SRIF-based LiDAR-IMU Localization(SRIF的LiDAR-IMU自动驾驶鲁棒定位)

0. 简介 对于车辆来说&#xff0c;我们更希望能够得到一个有效的定位系统&#xff0c;能够保证高精度的同时&#xff0c;拥有较高的鲁棒性&#xff0c;而《Robust SRIF-based LiDAR-IMU Localization for Autonomous Vehicles》就是这样一篇文章&#xff0c;在各种场景中实现了…

起名大师,支持多种取名方式,根据自己的喜好去选择

软件功能&#xff1a; 1.参考宝宝姓氏、性别、生辰八字、天格、地格辅助用户为宝宝取名。 2.一次可生产数千个好名字&#xff0c;您还可根据笔画数、拼音、五行等筛选喜欢的名字。 3.提供10余种方法供起名选择&#xff0c;比如指定取名&#xff0c;谐音取名&#xff0c;生日取…

【百度】判断ip地址是否合法

在LeetCode上没有看到这个题目&#xff0c;加上对String的API记得不清楚&#xff0c;导致这个题目没有写得很好&#xff0c;许愿面试官能够仁慈一点 一个合法的ip地址应该有&#xff1a; 三个点将字符串划分为4个数字数字的大小[0,255]&#xff0c;且数字不能为空 合理应用St…

mycat 垂直分库与水平分表使用详解

说明 在了解mycat的常用分片规则之前,有必要再对涉及到分片规则相关的几个配置文件做深入的了解,包括:schema.xml,server.xml,rule.xml等, 其中最核心的schema.xml文件是配置分片规则的入口文件,有必要对该配置文件中的关键参数做了解,且看下面这幅图,回顾下里面的配置…

【C++】二叉搜索树KV模型

最典型的一个场景&#xff0c;自动翻译软件&#xff0c;输入中文&#xff0c;输出对应的英文&#xff0c;输入英文&#xff0c;输出对应的中文。 可以用一颗搜索二叉树来实现这一功能。 K->key V->val 基础结构和普通搜索二叉树保持一致&#xff0c;只是成员多了一个_val…

关于Tab制表符,点击一次跳很多字符的问题解决

首先在出现问题的地方右键鼠标&#xff0c;出现后点击段落。 进入后点击左下角的制表位 进入后点击全部清除&#xff0c;然后确认&#xff0c;问题就解决了&#xff08;哪里有问题就处理哪里&#xff09;

天纵竞赛系统助力江苏省“苏小登杯”不动产登记技能竞赛暨首届全国赛省级选拔赛

7月14日&#xff0c;第四届江苏省“苏小登杯”不动产登记技能竞赛暨首届全国赛省级选拔赛在苏州广播电视总成功举办。天纵竞赛系统提供核心软件技术及其配套硬件支持。 本次竞赛由江苏全省13支队伍、52名一线不动产登记人员参加比赛&#xff0c;竞赛环节包括笔试、现场竞答、代…

性能测试 —— JMeter分布式测试及其详细步骤

性能测试概要 性能测试是软件测试中的一种&#xff0c;它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈&#xff0c;确保能满足业务需求。很多系统都需要做性能测试&#xff0c;如Web应用、数据库和操作系统等。 性能测试种类非常多&#xff0c…

windows操作小技巧1:文件批操作更改类型

今日更新一个Windows操作小技巧: 日常生活中我们有批量操作更改文件后缀名&#xff08;类型&#xff09;的需要&#xff1a; 比如这有五个.txt文本文件&#xff0c;我要想将其批量改为.html该如何操作呢&#xff1f; 首先新建文本文档&#xff1a; 其次在新建的文本文档输入以…

B 端软件:常见知识梳理

前言 我一直从事企业级软件研发工作&#xff0c;也就是我们通常称之为 B 端软件。近年来&#xff0c;我的工作重心主要在研发低代码平台和 aPaaS 平台&#xff0c;这使我对 B 端软件有了更深入的理解。 和 B 端软件对应的就是我们熟悉的 C 端软件&#xff0c;我们手机中安装的那…

VsCode添加Vue模版代码片段

文章目录 VsCode添加Vue模版代码片段1. 复制一段已有要制作模板的Vue代码&#xff0c;比如&#xff1a;2. 粘贴到下方链接的工具网站&#xff0c;可自动生成模板代码的片段3. VsCode中设置代码片段3-1 打开菜单&#xff1a;首选项-用户片段3-2 出现如下的搜索栏&#xff0c;搜索…