PTA 520 钻石争霸赛 2022_521序列 pta-程序员宅基地

技术标签: 算法  补题  c++  c语言  

7-1 520表白 

在 520 这个日子里,拼题 A 请你实现一个小功能,帮助用户向自己喜欢的数字表白。

输入格式:

输入在一行中给出一个不超过 1000 的正整数 N,是用户最喜欢的一个数字。

输出格式:

在一行中按以下格式输出对 N 的表白:

N! 520!

输入样例:

233

输出样例:

233! 520!

 AC代码

#include <iostream>

using namespace std;


int main() {
    int n;
    cin >> n;
    cout << n << "! 520!" << endl;
    return 0;
}

7-2 分糖豆

N 个宝宝分 M 颗 m&m 糖豆,如果每人分 K 个,够不够分呀?

输入格式:

输入在一行中给出 3 个正整数,分别是 N(不超过 100),是宝宝们的总人数;M(不超过 1000),是糖豆的总颗数;K(不超过 10),是要分给每个宝宝的糖豆数。

输出格式:

如果每人 K 个正好能够分完,输出 zheng hao mei ren K!;如果分完了还剩 X 颗糖豆,则输出 hai sheng X!;如果不够分的,还差 X 颗糖豆,则输出 hai cha X!

输入样例 1:

10 50 5

输出样例 1:

zheng hao mei ren 5!

输入样例 2:

12 30 2

输出样例 2:

hai sheng 6!

输入样例 3:

15 40 3

输出样例 3:

hai cha 5!

 AC代码

#include <iostream>

using namespace std;

int N, M, K;

int main() {
    cin >> N >> M >> K;

    if (N * K == M) {
        cout << "zheng hao mei ren " << K << "!\n";
    } else if (N * K < M) {
        cout << "hai sheng " << M - N * K << "!\n";
    } else if (N * K > M) {
        cout << "hai cha " << N * K - M << "!\n";
    }

    return 0;
}

7-3 约会App

在 520 这个日子里,没有比开发一个约会 App 更合适做的事情了。这个软件的需求很简单,用户输入自己的性别、想要约会的异性的年龄范围 [a,b]、身高范围 [c,d],你要帮用户筛选出系统中满足其约会条件的所有异性。注意:性别、年龄、身高的要求必须全都符合要求才可以。

输入格式:

输入第一行首先给出一个用户自己输入的信息,格式如下:

性别 a b c d

其中 性别 为 0 表示女性,1 表示男性,是该用户自己的性别;后面四个数字依次表示该用户想要约会的异性的年龄下限、年龄上限、身高下限、身高上限 —— 注意这里的范围都是闭区间。

随后一行给出一个正整数 N≤100,随后 N 行,每行给出一位系统中登记的约会对象的信息,格式如下:

性别 年龄 身高

这里保证年龄和身高(包括上、下限)均为不超过 200 的正整数,同行数字间以 1 个空格分隔。

输出格式:

按照输入的顺序,输出每个满足用户约会条件的约会对象的信息,输出格式与输入格式相同。题目保证至少有一个人可以被输出。

输入样例:

1 20 25 160 175
6
0 28 165
1 21 170
0 25 160
0 22 180
1 20 175
0 20 175

输出样例:

0 25 160
0 20 175

 AC代码

//from Spare lin
#include <iostream>

using namespace std;

int N, sexUser, sexObj, a, b, c, d, age, height;

int main() {

    cin >> sexUser >> a >> b >> c >> d;
    cin >> N;
    while (N--) {
        cin >> sexObj >> age >> height;
        if (age >= a && age <= b && height >= c && height <= d && sexObj != sexUser) {
            cout << sexObj << ' ' << age << ' ' << height << "\n";
        }
    }
    return 0;
}

7-4 关于奇数的等式 

给定任一正奇数 n>3 和一个解的上界 m>3,求三个正奇数 x、y、z,满足 0<x<y<z≤m 且有等式 3/n=1/x+1/y+1/z。

输入格式:

输入给出正奇数 3<n<400 和解的上界 m≤1000。

输出格式:

在一行中输出给定范围内最小的一组解 x y z(即存在多组解时取最小的 x,并列时取最小的 y)。数字间以 1 个空格分隔,行首尾不得有多余空格。

如果给定范围内无解,则输出 No solution in (3, m]. 其中 m 是给定的上界。

输入样例 1:

27 500

输出样例 1:

11 55 495

输入样例 2:

27 50

输出样例 2:

No solution in (3, 50].

思路:三重循环暴力即可 注意精度问题 需要通分

 AC代码

#include <iostream>

using namespace std;

int n, m, flag = 0;

int main() {
    cin >> n >> m;
    for (int x = 1; x < m; x += 2) {
        for (int y = x + 2; y < m; y += 2) {
            for (int z = y + 2; z < m; z += 2) {
                if (3.0 == (1.0 / x + 1.0 / y + 1.0 / z) * n) {
                    cout << x << ' ' << y << ' ' << z << "\n";
                    flag = 1;
                    return 0;
                }
            }
        }
    }
    if (flag == 0) {
        cout << "No solution in (3, " << m << "].\n";
    }
    return 0;
}

7-5 我侬数

元初的中国书画大家赵孟頫的妻子管道升曾经写过一首脍炙人口的《我侬词》,词中道:“把一块泥,捻一个你,塑一个我。将咱们两个一齐打破,用水调和。再捏一个你,再塑一个我。我泥中有你,你泥中有我。”

给定一对正整数 A 和 B,将它们的各位数字收集到一起,再重新分成两个数 A′ 和 B′,我们称这样的 A′ 和 B′ 互为基于 A 和 B 的“我侬数“。本题就请你判断任一对数字是否是基于给定 A 和 B 的“我侬数“。

输入格式:

输入首先在第一行中给出两个不超过 104 位的正整数 A 和 B,为“我侬数“的基础数。随后每行给出一对不超过 2×104 位的正整数 A′ 和 B′。数字间以 1 个空格分隔。

输入以一对 0 结束,这一对 0 不要处理。题目保证至少有一对需要判定的数字。

输出格式:

对每一对 A′ 和 B′,判断其是否是基于给定 A 和 B 的“我侬数“。如果是,则在一行中输出 Yes,否则输出 No

注意:所有数字均不考虑前导 0。例如 A=101,B=2021,则我们不能判定 012 和 0121 为“我侬数“。

输入样例:

521212577999 21100008482136
521212577999 21100008482136
00210908482136 512121257799
123456789012597890 11100222
786238645254 19024781758903
21100008482136 521212577999
90 52121257792110008482136
0 0

输出样例:

Yes
No
Yes
No
Yes
No

 思路:要判断时候为我题意要求的我侬数 ,只需对去前导0后的字符串中的0 - 9进行计数

            若二者的计数一样则输出Yes 否则输出No

AC代码

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

using namespace std;

map<char, int> mp, mp1;
string a, b, ax, bx;

string eraseString(string temp) {
    int index = 0;
    for (index = 0; index < temp.size() - 1; ++index) {
        if (temp[index] != '0') break;
    }
    temp.erase(0, index);
    return temp;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    cin >> a >> b;
    //cout << eraseString(a) << " " << eraseString(b) << "\n";
    string ans = eraseString(a) + eraseString(b);
    for (int i = 0; i < ans.length(); i++) mp[ans[i]]++;
    while (cin >> ax >> bx) {
        string temp = eraseString(ax) + eraseString(bx);
        if (temp == "00") break;
        for (int i = 0; i < temp.size(); i++)
            mp1[temp[i]]++;
        if (mp == mp1) cout << "Yes" << '\n';
        else cout << "No" << '\n';
        mp1.clear();
    }
    return 0;
}

7-6 非诚勿扰

“非诚勿扰”是江苏台一款非常受欢迎的相亲节目,台上的女嘉宾们可以从出场的男嘉宾中选择自己喜欢的牵手离开。问题是怎样才能选到最适合自己的男嘉宾呢?这是个概率问题。

解决这个问题有一种随机算法:假设女嘉宾知道自己最多能在台上录几期节目,也就知道自己最多能见到 N 位男嘉宾,那么她可以选择一个随机数 R(<N),对她见到的前 R 位男嘉宾,一个都不牵,只是以他们中最合适的那位作为一个标准,从第 R+1 位男嘉宾开始,只要遇到一个比标准更合适的,就决定牵手。理论上可以证明,当 R=N/e (其中 e 是自然常数,约等于 2.718)时,这样做能牵手最合适的男嘉宾的概率最高。

本题就请你根据男嘉宾的出场顺序,预测一下女嘉宾会牵手哪一位。

输入格式:

输入首先在第一行中给出正整数 N(3≤N≤104),即男嘉宾的数量。第二行给出 N 个互不相同的正整数,第 i 个数字表示第 i 位男嘉宾在女嘉宾心目中的得分。数字均不超过 105,之间以空格分隔。

输出格式:

女嘉宾将以 R=⌊N/e⌋ 为线,采用题面中描述的算法选择牵手的男嘉宾。这里我们取 e=2.718。请在一行中输出她牵手的男嘉宾的序号和真正最适合她的男嘉宾的序号(从 1 开始),数字间以 1 个空格分隔。

如果她一直没有遇到比标准更合适的人,就会独自离开,此时对应的序号输出为 0

输入样例 1:

10
23 84 15 29 17 56 85 40 91 28

输出样例 1:

7 9

输入样例 2:

10
56 85 17 23 84 15 29 40 31 28

输出样例 2:

0 2

 思路:按照题目依次遍历即可~

 AC代码

#include <iostream>

using namespace std;

const int MAXN = 1e4 + 7;
const double e = 2.718;
int N, R, arr[MAXN];

int main() {
    cin >> N;
    for (int i = 1; i <= N; i++) {
        cin >> arr[i];
    }
    R = N / e;
    int maxPoints = -1;
    for (int i = 1; i <= R; i++) {
        if (maxPoints < arr[i]) {
            maxPoints = arr[i];
        }
    }
    int ansPos1, ansPos2, flag = 0;
    for (int i = R + 1; i <= N; i++) {
        if (maxPoints < arr[i]) {
            ansPos1 = i;
            flag = 1;
            break;
        }
    }
    int maxScore = -1;
    for (int i = 1; i <= N; i++) {
        if (maxScore < arr[i]) {
            maxScore = arr[i];
            ansPos2 = i;
        }
    }
    if (flag == 0) ansPos1 = 0;
    cout << ansPos1 << ' ' << ansPos2 << endl;
    return 0;
}

7-7 新式六合彩

新式六合彩跟传统六合彩其实没有半点关系,只是姥姥为了出题杜撰出来的一种玩法——每位玩家可以下注一个六位数,如果跟开出来的幸运六位数最接近就可以获奖(所谓最接近,是指该数字与幸运数之差的绝对值最小)。

但规则如果这么简单就没什么可玩的了…… 我们把规则搞复杂一点:首先创建一个有 n×m 个格子的矩阵,保证格子总数不小于玩家总数,可以把所有玩家下注的数字随机放进格子里,每个格子最多放一个。然后我们随机生成一个幸运行号 r (1≤r≤n)和幸运列号 c (1≤c≤m),再随机生成一个幸运六位数。中奖者是第 r 行和第 c 列的所有六位数中与幸运数最接近的那个数字的主人。

本题就请你写个程序实现这个抽奖功能。

输入格式:

输入第一行给出 2 个正整数 n 和 m(1≤n,m≤1000),随后 n 行,每行给出 m 个数字,对应该位置格子里玩家下注的数字。如果这个格子是空的,就用 −1 表示。最后一行给出幸运行号 r、幸运列号 c 和幸运六位数。同行数字间以空格分隔。

注意:行号从上向下递增,列号从左向右递增,均从 1 开始计数。

输出格式:

按照 (行号:列号) 的格式输出中奖者的位置。如果中奖者不唯一,则按照首先在幸运行中从左到右,然后在幸运列中从上到下的顺序输出,每行输出一位中奖者的位置。注意同一个位置只能输出一次。题目保证至少存在一位中奖者。

输入样例:

4 5
233333 000001 -1 888888 666666
001010 369624 777888 -1 999999
480735 100000 591846 369623 123123
456456 591846 000000 501000 233333
2 3 480735

输出样例:

(2:2)
(3:3)

 思路:先分别遍历给出的行和列 求出最小差值  再分别遍历给出的行和列若等于最小差值则输出最对应坐标, 注意元素值为-1时跳过 以及在遍历列时若有已经在遍历行时输出的坐标就跳过

AC代码

#include <iostream>
#include <cmath>

using namespace std;
#define endl '\n'
const int MAXN = 1e3 + 7;
int arr[MAXN][MAXN], det = 0x3f3f3f3f;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> arr[i][j];
        }
    }
    int r, c, num;
    cin >> r >> c >> num;
    for (int j = 1; j <= m; j++) {
        if (arr[r][j] != -1) {
            det = min(det, abs(num - arr[r][j]));
        }
    }
    for (int i = 1; i <= n; i++) {
        if (arr[i][c] != -1) {
            det = min(det, abs(num - arr[i][c]));
        }
    }

    for (int j = 1; j <= m; j++) {
        if (arr[r][j] == -1) continue;
        if (abs(num - arr[r][j]) == det) {
            cout << "(" << r << ":" << j << ")" << endl;
        }
    }
    for (int i = 1; i <= n; i++) {
        if (arr[i][c] == -1 || i == r) continue;
        if (abs(num - arr[i][c]) == det) {
            cout << "(" << i << ":" << c << ")" << endl;
        }
    }
    return 0;
}

7-8 521序列

所谓“521 序列”是指将一个原始整数序列 S 中的每个数字分别乘以 5、2、1 后形成的序列,例如 S= { 5, 2, 1 } 时,其对应的 521 序列就是 { 25, 10, 5, 10, 4, 2, 5, 2, 1 } —— 这里我们不要求这个序列一定具有某种顺序,即 521 序列中元素的顺序是可以打乱的。给定 S 后,计算其对应的 521 序列是很简单的。但给定一个 521 序列,恢复其对应的原始序列 S 就略微复杂一点了。本题就请你恢复任意给定的 521 序列的原始序列。

输入格式:

输入第一行给出正整数 N(<105),为 521 序列的长度。随后一行给出 N 个整数,即给定的 521 序列。所有数字的绝对值不超过 105,以空格分隔。

输出格式:

在一行中按照非递增序输出 521 序列对应的原始序列。数字间以 1 个空格分隔,行首尾不得有多余空格。

题目保证原始序列是存在的。

输入样例:

12
1 -5 10 -1 2 4 5 -2 5 25 10 2

输出样例:

5 2 1 -1

 AC代码

#include <iostream>
#include <algorithm>
#include <set>

using namespace std;

multiset<int, greater<>> s;

int main() {
    int N;
    cin >> N;
    for (int i = 0; i < N; ++i) {
        int temp;
        cin >> temp;
        s.insert(temp);
    }
    for (int i = 0; i < N / 3; i++) {
        int temp = *s.begin();
        if (temp > 0) {
            temp /= 5;
        }
        if (i == 0) cout << temp;
        else cout << " " << temp;
        s.erase(s.find(temp));
        s.erase(s.find(2 * temp));
        s.erase(s.find(5 * temp));
    }
    return 0;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_55664293/article/details/124892176

智能推荐

2023年第七届强网杯初赛 WP_2023强网杯赛题-程序员宅基地

文章浏览阅读1.8k次,点赞22次,收藏21次。最坏情况下,前5次全输,需要87步即可达到260分,即第92轮时,因此可以通过本题。利用SQL注入修改data数据的值,本题data是数组,且会插入数据库,最终的payload需要改一下让前后闭合,且TP5,在网上找一个链子的EXP改一下。当然,前一题的SQL注入点依然存在,不过依然需要鉴权进入后台,这意味着,只需要我们能进入后台,就能通过load_file的方式读取flag。简单来说,就是能set任意的值,例如下方的payload,就能注入一个snowwolf的键,且值为wolf,4代表数据长度。_2023强网杯赛题

JavaWeb CURD 一键生成,再也不要重复搬砖了!【免费源码】_基于java类的curbecms-程序员宅基地

文章浏览阅读836次,点赞2次,收藏2次。简介本文将给您介绍 AppAdmin 后台管理系统开发框架。AppAdmin后台管理系统开发框架是一套Java开发的整合了当前众多比较流行的Java后台开发框架的系统,使用H5响应式布局。整合了 spring + springMVC + hibernate (JPA) + shiro + ehcache 等框架,功能包括基本的系统管理、权限、角色、存储(oss、本地、ftp)、缓存、站内信、..._基于java类的curbecms

记录:jackson报错问题:com.fasterxml.jackson.core.TSFBuilder-程序员宅基地

文章浏览阅读9.2k次。背景:java -jar启动报错,但是本地idea运行正常。环境:jdk1.8jackson: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.5</version&_com.fasterxml.jackson.core.tsfbuilder

Palworld幻兽帕鲁自建服务器教程,1分钟自建幻兽帕鲁服务器教程-程序员宅基地

文章浏览阅读77次。2024阿里云和腾讯云均推出专属幻兽帕鲁Palworld游戏优惠服务器,阿里云配置分为4核16G和4核32G服务器,4核16G配置32.25元/1个月、10M带宽66.30元/1个月、4核32G配置113.24元/1个月,4核32G配置3个月339.72元。幻兽帕鲁服务器官方推荐是4核16G配置,Windows和Linux服务器操作系统,Windows-Steam,Linux-SteamCMD,默认端口port=8211,玩家players=32。14带宽3个月277.2元,一年1584元。

网络由三十台计算机组成,自考网络教育计算机组成原理作业考试题及答案三套.doc...-程序员宅基地

文章浏览阅读85次。自考网络教育计算机组成原理作业考试题及答案三套计算机组成原理 一、单项选择题(本大题共100分,共 40 小题,每小题 2.5 分)1. CPU从主存取出一条指令并执行该指令的时间叫做( ) A. 机器周期 B. 指令周期 C. 时钟周期 D. 总线周期2. 同步控制是( ). A. 只适用于CPU控制的方式 B. 只适用于外围设备控制的方式 C. 由统一时序信号控制的方式 D. 所有指令控制时间..._30台计算机组成的网络

封印者与登录服务器的连接已中断,封印者闪退掉线黑屏怎么办 无法登陆如何解决...-程序员宅基地

文章浏览阅读1.1k次。封印者闪退掉线黑屏怎么办?游戏无法登陆如何解决?封印者是最近不删档的游戏,受到了不少玩家喜爱。有不少玩家反映在玩封印者出现了闪退等问题,那么如何解决上述问题呢?下面就和说玩网小编一起去看看吧。1、网络问题,有时候网络不好,链接不上游戏,就会出现闪退。解决方法:建议在玩家在WIFI环境下开始游戏,或者是3G/4G等网络环境较好的地方开始游戏。2、玩家手机内存不够,玩家手机的内存不够了,就会出现卡顿、..._封印者闪退解决方案

随便推点

指针的基本知识_指针指向的是值还是地址-程序员宅基地

文章浏览阅读1.4k次。指针一、指针是什么1、指针是什么?指针理解的2个要点:1. 指针是内存中一个最小单元的编号,也就是地址;2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量总结:指针就是地址,口语中说得指针通常值得是指针变量2、指针变量我们可以通过&(取地址操作符)取出变量的内存真实地址,吧地址可以存放到一个变量中,这个变量就是指针变量。实例#include <stdio.h> { int a=10; _指针指向的是值还是地址

力扣Leetcode 2 两数相加 Add Two Numbers_力扣 2. 两数相加 add two numbers 调试-程序员宅基地

文章浏览阅读85次。暴力法递归法_力扣 2. 两数相加 add two numbers 调试

单目深度估计评估指标_单目系统中的量化评估指标-程序员宅基地

文章浏览阅读7.6k次,点赞15次,收藏35次。KITTI Depth以及ScanNet评估指标 指标 名称 表达式 abs rel. absolute relative error mae mean absolute error log mae mean absolute logarithmic error imae inverse mean absolu..._单目系统中的量化评估指标

探索 `ansible-role-nginx`: 简化Nginx服务器配置的Ansible角色-程序员宅基地

文章浏览阅读870次,点赞7次,收藏20次。探索 ansible-role-nginx: 简化Nginx服务器配置的Ansible角色项目地址:https://gitcode.com/jdauphant/ansible-role-nginx在现代Web服务管理中,自动化运维工具起着至关重要的作用,而Ansible就是其中的一把利剑。今天我们要介绍的是一个由jdauphant维护的Ansible角色——ansible-role-nginx...

利用tkinter制作一个用户界面:开始研究界面的零件及细节_python tkinter 注册页面-程序员宅基地

文章浏览阅读555次,点赞2次,收藏4次。导入:我想作为一名Python程序猿,大家对于tkinter大家应该不陌生了吧,那么在接下几篇博文里我将跟大伙一起来实现tkinter的用户登录界面。注意:该界面没有注册哦~tkinter的基础:想要先实例化一个窗口我们就得学会以下代码:import tkinter as tkwindow = tk.Tk()window.title("xxx")window.geometry("300x500")#注意,引号中的窗口大小必须用"x",而不是“*”window.mainloop()运行了_python tkinter 注册页面

How Firewalls (Security Gateways) Handle the Packets? (Traffic Flow)-程序员宅基地

文章浏览阅读167次。Different firewall (security gateway) vendor has different solution to handle the passing traffic. This post compiles some useful Internet posts that interpret major vendors’ solutions including:1. C..._traffic@flow: nat: