PAT (Basic Level) Practice (中文)

news2024/9/27 6:47:24

1003 我要通过

通过观察不难发现在一个规律:P之前A的个数*P和T之间A的个数等于T之后A的个数答案才正确

总结一下如何才能答案正确?

1.必须只能有P,A,T这三种字符

2.P和T之间必须要有A

3.P之前A的个数*P和T之间A的个数等于T之后A的个数

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n; cin >> n;
    while(n--){
        map<char,int> mp;
        string s; cin >> s;
        int len = s.size();
        bool flag = true;
        int ppos = 0,tpos = 0,cntbefore = 0,cntafter = 0,cnt = 0;
        for(int i = 0; i < len; i++){
            if((s[i] >= 'B' && s[i] < 'P')||(s[i]> 'P' &&s[i] < 'T') || (s[i] > 'T')){
                flag = false;
            }
            if(s[i] == 'P') ppos = i;
            if(s[i] == 'T') tpos = i;
            mp[s[i]]++;
            if(mp['P'] == 0 && s[i] == 'A') cntbefore++;
            if(mp['P'] == 1 && s[i] == 'A' && mp['T'] == 1) cntafter++;
            if(mp['P'] == 1 && mp['T'] == 0 && s[i] == 'A') cnt ++;
        }
        if(mp['P'] != 1 || mp['T'] != 1 || tpos - ppos <= 1) flag = false;
        if(flag && cnt * cntbefore != cntafter) flag = false;
        cout << (flag ? "YES\n" : "NO\n");
    }

    return 0;
}

1005 继续(3n+1)猜想

这个地方我误解了题目,我以为只需要把k这个数转化为1的过程中的数 记录下来即可确定关键数字。没有想到是要把k个数字每个数字都转化为1过程中的数做记录

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    
    int k;
    cin >> k;
    vector<int> nums(k);
    map<int, int> mp;

    // 读取所有的数字
    for (int i = 0; i < k; ++i) {
        cin >> nums[i];
    }

    // 生成所有数字的卡拉兹序列,并标记被覆盖的数字
    for (int i = 0; i < k; ++i) {
        int x = nums[i];
        while (x != 1) {
            if (x % 2 == 1) x = 3 * x + 1;
            x /= 2;
            mp[x] = 1; // 标记为已覆盖
        }
    }

    // 筛选出关键数字
    vector<int> res;
    for (int i = 0; i < k; ++i) {
        if (mp.find(nums[i]) == mp.end()) {
            res.push_back(nums[i]);
        }
    }

    // 按从大到小的顺序排序并输出
    sort(res.begin(), res.end(), greater<int>());
    for (int i = 0; i < res.size(); ++i) {
        cout << res[i];
        if (i + 1 != res.size()) cout << " ";
    }

    return 0;
}

 1006 换个格式输出整数

 这个地方把整数先转化为字符串类型,这样本来整数获取每个位的数字是倒过来的,转化为字符串后,就可以正着处理。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n; 
    cin >> n;
    string s;
    string str_n = to_string(n);  // 将 n 转换为字符串
    int len = str_n.length();
    
    for(int i = 0; i < len; i++) {
        int digit = str_n[i] - '0';  // 提取当前位的数字
        if (i == len - 3) {
            for (int j = 0; j < digit; j++) {
                s += 'B';
            }
        } else if (i == len - 2) {  // 处理十位数
            for (int j = 0; j < digit; j++) {
                s += 'S';
            }
        } else {  // 处理个位数
            for (int j = 1; j <= digit; j++) {
                s += ('0' + j);
            }
        }
    }
    
    cout << s << endl;
    return 0;
}

1007 素数对猜想

 

这里要注意prime[i+1] < n 

运用埃氏筛选法获取质数表 -> 循环统计d == 2的对数 

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5+10;
int prime[N],cnt;
bool st[N];
void get_prime(){
    for(int i = 2; i <= N; i++){
        if(!st[i]){
            prime[cnt++] = i;
            for(int j = i + i; j <= N; j+= i){
               st[j] = true;
            }
        }
    }
}
int main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n; cin >> n;
    get_prime();
    int ans = 0;
    for(int i = 1; prime[i + 1] <= n; i++){
        int d = prime[i+1] - prime[i];
        //cout << prime[i+1] << " " <<prime[i] <<'\n';
        if(d == 2) ans++;
    }
    cout << ans <<'\n';
    return 0;
}

 
1008 数组元素循环右移问题

#include <bits/stdc++.h>
using namespace std;
const int N = 220;
int a[N],b[N];
int main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n,m; cin >> n >> m;
    for(int i = 0; i < n; i++) cin >> a[i];
    for(int i = 0; i < n; i++){
        // cout<<(i+m)%n<<" ";
        b[(i + m) % n] = a[i];
    }
    for(int i = 0; i < n; i++){
        cout << b[i];
        if(i != n - 1) cout << " ";
    } 
    
    return 0;
}

1009 说反话

记得每次都需要把tmp清空 

基本思路:根据空格来分割字符串,储存到vector中,然后再利用reverse函数来翻转输出

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    string s;
    getline(cin,s);
    vector<string> ans;
    string tmp = "";
    for(int i = 0; i < s.size(); i++){
        if(s[i] != ' ' && s[i] != '\n') {
            tmp += s[i];
        } else {
            if(!tmp.empty()) {
                ans.push_back(tmp);
                tmp.clear(); // 清空 tmp 以准备下一个单词
            }
        }
    }
    if(!tmp.empty()) {
        ans.push_back(tmp); // 将最后一个单词加入 ans
    }
    reverse(ans.begin(),ans.end());
    for(int i = 0; i < ans.size(); i++){
        cout << ans[i] << (i < ans.size() - 1 ? " " : ""); // 添加空格以分隔单词
    }
    return 0;
}

1011 A+B 和 C 

 

这里数据范围不会爆long long,如果再大点就需要用高精度加法 

还需要注意负数绝对值大的反而小

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t; cin >> t;
    for(int i = 1; i <= t; i++){
        ll a, b, c; cin >> a >> b >> c;
        if(a + b < 0 && c < 0){
            if(abs(a + b) < abs(c))
                printf("Case #%d: true\n",i);
            else printf("Case #%d: false\n",i);
        }else{
            if((a + b) > c)
                printf("Case #%d: true\n",i);
            else printf("Case #%d: false\n",i);
        }
        


    }
    return 0;
}

坑人的点!!!就是范为10^4是质数的范围,所以我们的N要足够大才行,不然测试点4过不了!

首先获得质数表(运用埃氏筛选法)-> 通过查表获得pm~pn之间的质数

#include <bits/stdc++.h>
using namespace std;
const int N = 200100;  // 素数数组的最大长度
bool st[N];
int prime[N], cnt;

void get_prime() {
    for (int i = 2; i <= N; i++) {
        if (!st[i]) {
            prime[cnt++] = i;
            for (int j = i + i; j <= N; j += i) {
                st[j] = true;
            }
        }
    }
}

int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    get_prime();
    int m, n; 
    cin >> m >> n;
    int count = 0;
    for (int i = m - 1; i < n; i++) {  // 从 m - 1 开始,因为 prime 的索引从 0 开始
        cout << prime[i];
        count++;

        // 判断是否需要换行
        if (count % 10 == 0 || i == n - 1) {
            cout << '\n';
        } else {
            cout << " ";  // 如果不是最后一个数字,输出空格
        }
    }
    return 0;
}

 总结:题目的理解还需要加强,代码尽量减少bug的出现,例如,重置临时变量

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

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

相关文章

【HTML】模拟消息折叠效果【附源代码】

文件结构 收起效果 展开效果 HTML部分 HTML部分定义了网页的结构和内容。 <!DOCTYPE html> 声明了文档类型和HTML版本。<html> 元素是所有其他HTML元素的父元素。<head> 元素包含了文档的元数据&#xff0c;如字符集、视口设置、标题和链接的样式表。<b…

高效又经济,乔拓云助力,快速上线功能全面的小程序解决方案

乔拓云模板化小程序开发费用 在当今数字化时代&#xff0c;小程序成为企业拓展市场的新利器。乔拓云平台提供模板化开发方案&#xff0c;让您的小程序能同时覆盖微信与百度&#xff0c;迅速触达更多用户。 选择乔拓云模板&#xff0c;无需从零开始设计&#xff0c;直接复用精美…

ssrf+redis未授权访问漏洞复现

目录 靶场搭建 报错问题解决 组合利用 使用goherus生成payload 靶场搭建 首先我们进入ubutuo拉取靶场 docker run -d -p 8765:80 8023/pikachu-expect:latest 报错问题解决 如果出现docker报错&#xff0c;靶场一直拉取不下来 解决办法&#xff1a;配置镜像加速器 vim /et…

二叉树中查找值为x的节点(递归查找)

一&#xff1a;前提 本文紧接此篇博客&#xff1a; 递归实现 前/中/后序 遍历二叉树 的详细讲解-CSDN博客 模型依旧为&#xff1a; 二&#xff1a;代码 三&#xff1a;递归展开 假设找3&#xff1a; 假设找 7,7不存在&#xff0c;最后返回NULL 左&#xff1a; 右&#xff1…

机器学习 第5章 神经网络

这里写目录标题 5.1 神经元模型5.2 感知机与多层网络5.3 误差逆传播算法5.4 其他常见神经网络5.4.1 RBF网络5.4.2 ART网络5.4.3 SOM网络5.4.4 级联相关网络 5.5 深度学习 5.1 神经元模型 神经网络是一种由神经元构成的计算模型&#xff0c;模拟了生物神经系统的工作原理。神经…

【MySQL】优化 - 深分页

深分页 问题优化方法子查询延迟关联游标 问题 就是查询偏移量过大的场景&#xff0c;会导致查询性能较低&#xff0c;例如 # MySQL 在无法利用索引的情况下跳过1000000条记录后&#xff0c;再获取10条记录 SELECT * FROM t_order ORDER BY id LIMIT 1000000, 10首先&#xff…

嵌入式:用J-Link Commander和J-Flash进行Flash编程的区别

相关阅读 嵌入式https://blog.csdn.net/weixin_45791458/category_12768532.html?spm1001.2014.3001.5482 J-Link Commander和J-Flash都是用于Flash编程的工具&#xff0c;但它们的功能和应用场景有所不同。以下是两者的区别&#xff1a; J-Link Commander: 类型: 命令行工…

.NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强

DevExpress XAF是一款强大的现代应用程序框架&#xff0c;允许同时开发ASP.NET和WinForms。DevExpress XAF采用模块化设计&#xff0c;开发人员可以选择内建模块&#xff0c;也可以自行创建&#xff0c;从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 在DevEx…

为什么说中医的本质是医“中”

日前&#xff0c;与一位懂中医的朋友朋友聊天&#xff0c;他言简意赅地指出“中医的本质就是医‘中’”。反思后总结如下&#xff0c;以飨读者&#xff0c;同时欢迎批评指正&#xff01; “中医的本质是医‘中’”强调了中医的核心在于其整体观和辩证方法。中医“中”的本质在于…

【OAuth2】为什么授权码模式更安全?为什么使用授权码比直接返回token更安全?

OAuth2 什么是OAuth2OAuth2的主要角色OAuth2的工作原理OAuth2的授权模式为什么授权码模式更安全&#xff1f; 什么是OAuth2 简而言之&#xff1a;安全的用你的其他账号登陆一个新网站&#xff08;甚至访问你在其他网站上存储的私密资源&#xff08;如头像、照片等&#xff09;…

金融大模型:数据治理与AI应用创新的新时代

金融大模型&#xff1a;数据治理与AI应用创新的新时代 前言金融数据治理与应用创新的新时代 前言 在当今数字化飞速发展的时代&#xff0c;金融行业也在经历着深刻的变革。金融大模型作为一种新兴的技术力量&#xff0c;正在逐渐改变着金融数据的治理和应用方式。它不仅为金融…

利用机器学习推动 vSOC 检测

我们讨论了汽车 API 如何成为智能移动生态系统的主要攻击媒介之一。与此相关的风险是显而易见的。如果威胁行为者能够大规模远程利用 API,他们将有能力损害品牌或提出赎金请求。当然,Splunk 平台的强大之处在于能够从任何数据大规模创建任何用例。在本博客中,我们将深入研究…

使用python基于fastapi发布接口(二)-连接mysql数据库查询数据

上一章在这里 操作 MySQL 数据库使用 mysql-connector-python 库 安装mysql-connector-python pip install mysql-connector-python 代码编写在原来代码基础上添加数据库连接配置 from typing import Union from fastapi import FastAPIapp = FastAPI(

【Qt】常见控件 —— QPushButton | QRadioButton

文章目录 QPushButtonQPushButton 的基本功能介绍QPushButton 添加快捷键通过图片实现 上下左右实现方向键的槽函数设置快捷键连发功能 QRadioButtonQRadioButton 的基本功能介绍通过 QRadioButton 选择性别具有排他效果禁用 选项 槽函数的使用情况基于 QRadioButton 实现一个简…

用AppleScript做macOS UI自动化

用AppleScript做macOS UI自动化 一、定位到System Setting → General → Login Items& Extensions 页面1. 获取页面锚点&#xff0c;以便直接滑动到锚点区域2. 滑动到Extensions 区域 二、根据名称找到元素&#xff0c;再点击元素的按钮三、获取元素位置并点击 一、定位到…

人工智能边缘计算应用教学解决方案

一、引言 随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;数据生成量呈爆炸式增长&#xff0c;对数据处理速度、实时性和隐私保护的需求日益迫切。在此背景下&#xff0c;人工智能&#xff08;AI&#xff09;与边缘计算的结合成为了解决这一挑战的关键技术路…

牛客周赛 Round 57 解题报告 | 珂学家

前言 题解 难度比较适宜&#xff0c;这场周赛出的不错。 A. 小红喜欢1 题型: 签到语法 arr list(map(int, input().split()))print (arr.index(1) 1)B. 小红的树切割 思路&#xff1a;思维 统计边两端为同一颜色的边数即可 n int(input())s input()res 0 for i in r…

python爬虫,使用pyppeteer异步,爬取,获得指定标签内容

获得指定 #pip install pyppeteer,使用 Pyppeteer&#xff08;异步方案&#xff09; import asyncio from pyppeteer import launch async def main():browser await launch()page await browser.newPage()await page.goto(http://xxx/#/login)# 等待页面加载完成await page…

企业本地部署大型语言模型(LLMs)构建本地垂直领域知识库的策略|空天防御

0 引言 在数字化转型的浪潮中&#xff0c;传统企业面临着前所未有的机遇与挑战。随着大数据、云计算和人工智能技术的发展&#xff0c;企业积累的私有数据成为了潜在的金矿&#xff0c;等待着被挖掘和利用。大型语言模型&#xff08;LLMs&#xff09;作为当前人工智能领域的前…

基于深度学习的手势识别系统

基于深度学习网络的手势识别系统 完整源码数据集报告PPT全套信息 【python设计开发】基于深度学习的手势图像识别处理系统 【包括】代码 PPT 报告 2 需求分析 2.1要求 &#xff08;1&#xff09;用Python语言实现程序设计&#xff1b; &#xff08;2&#xff09;初识深度学习…