P A T 甲级:分类题型|字符串处理|1152、1150、1005、1001题解及延伸

系列目录


目录

  • 系列目录
  • 1152 Google Recruitment
    • 数学证明
    • substr()
    • stoi()
  • 1150 Travelling Salesman Problem
  • 1005 Spell It Right
  • 1001 A+B Format


1152 Google Recruitment

原题链接


C++
若未特殊标明,以下题解均写用C++

#include <iostream>using namespace std;bool isPrime(int num)
{if (num == 1 || num == 0) return false;// 用 i * i <= num 优化 原因见注解for (int i = 2; i * i <= num; i ++)if (num % i == 0) return false;return true;
}int main()
{int n, k;string s;cin >> n >> k >> s;// i 一旦大于 n - k ,取出的string长度就不足kfor (int i = 0; i <= n - k; i ++) {// 第一个参数 起始位置pos // 第二个参数 长度len// 作用对象s——s.substr()string s1 = s.substr(i, k);// string to intint num = stoi(s1);if (isPrime(num)) {cout << s1;// return 0的作用相当于 while 里的 breakreturn 0;}}// 循环结束也没有找到满足长度为k的 consecutive prime// 这里记得要加 双引号""cout << "404\n";return 0;
}   

注解:

数学证明

证明:如果 n u m 有一个大于其平方根的因子 a 那么它必然还有一个小于或等于其平方根的因子 b ,使得 a ∗ b = n u m 证明:如果 num有一个大于其平方根的因子 a \\ 那么它必然还有一个小于或等于其平方根的因子 b,使得 a * b = num 证明:如果num有一个大于其平方根的因子a那么它必然还有一个小于或等于其平方根的因子b,使得ab=num

设 a 是 n u m 的因子 且  a > n u m ⇒ 1 a < 1 n u m 由因数的定义,必然存在另一个因数 b 使得  a ∗ b = n u m b = n u m a < n u m 故得证 设a 是num的因子\ 且\ a > \sqrt{num}\\ \Rightarrow \frac{1}{a} < \frac{1}{\sqrt{num}} \\ 由因数的定义,必然存在另一个因数b \\使得\ a * b = num \\ b = \frac{num}{a} < \sqrt{num} \\ 故得证 anum的因子  a>num a1<num 1由因数的定义,必然存在另一个因数b使得 ab=numb=anum<num 故得证


substr()

substrstd::string 类的一个成员函数,用于从字符串中提取子串 这个函数接受两个参数(有时也可以接受三个参数,但在这里我们只讨论两个参数的情况):

  1. 起始位置(pos):子串开始的位置(基于0的索引)
  2. 长度(len):要提取的子串的长度

例如:

string t = s.substr(i, k);

这里 s 是一个 std::string 对象,i 是起始位置,k 是要提取的子串的长度

因此,t 将包含从 s的第 i 个字符开始,长度为 k 的子串

stoi()

stoi 是一个标准库函数,用于将字符串转换为 int 类型的整数 这个函数接受一个字符串参数,并尝试将其解析为一个整数 如果字符串包含非数字字符(除了可能的空白字符和符号字符,如 +-),则 stoi 会抛出一个 std::invalid_argument 异常 如果转换结果超出了 int 类型能够表示的范围,则会抛出一个 std::out_of_range 异常

示例:

try {  int num = std::stoi(t);  // 处理 num  
} catch (const std::invalid_argument& e) {  // 处理无效的输入  
} catch (const std::out_of_range& e) {  // 处理范围错误  
}

1150 Travelling Salesman Problem

🌟无序图+集合+二维数组

原题链接


C++
若未特殊标明,以下题解均写用C++

#include <iostream>
#include <vector>
#include <set>
#include <climits>using namespace std;int e[210][210], ans = INT_MAX, ansid;
// n表示顶点个数 m表示边的条数
int n, m;
vector<int> v;void check(int index) {// cnt 表示 该路径的顶点数int sum = 0, cnt, flag = 1;cin >> cnt;// 注意 集合的定义set<int> s;vector<int> v(cnt);for (int i = 0; i < cnt; i ++) {cin >> v[i];// 别忘了插入集合,确保每个顶点只出现一次——便于检查比较s.insert(v[i]);}// 要用到 i + 1for (int i = 0; i < cnt - 1; i ++) {if(e[v[i]][v[i + 1]] == 0)flag = 0;// 记录权值之和sum += e[v[i]][v[i + 1]];}// 缺边if (flag == 0)printf("Path %d: NA (Not a TS cycle)\n", index);// 首尾顶点不是同一个顶点 或 有重复顶点else if (v[0] != v[cnt - 1] || s.size() != n)printf("Path %d: %d (Not a TS cycle)\n", index, sum);// 缺顶点 未被遍历else if (cnt != n + 1) {printf("Path %d: %d (TS cycle)\n", index, sum);if (sum < ans) {ans = sum;ansid = index;}}else {printf("Path %d: %d (TS simple cycle)\n", index, sum);if (sum < ans) {ans = sum;ansid = index;}}
}int main() {cin >> n >> m;for (int i = 0; i < m; i ++) {// t1-city1 t2-city2 t- destinationint t1, t2, t;cin >> t1 >> t2 >> t;// 别忘了存储边的权值e[t1][t2] = e[t2][t1] = t;}// k表示要检查的路径数int k;cin >> k;for (int i = 1; i <= k; i ++)check(i);printf("Shortest Dist(%d) = %d\n", ansid, ans);return 0;
}

注解:

为什么flag == 1 只能保证所有的边存在,而不能保证所有的顶点都“存在”
实际上的图,边和顶点是分不开的,一条边的存在必然确定两个顶点
但图的某些部分没有被正确连接到遍历的起始点
说人话就是——遍历的时候只遍历到了所有的边,但并不一定遍历了所有顶点
如果为了判断某条边是否存在的同时遍历这条边的起始顶点和结束顶点
会产生大量重复的遍历——效率十分低下





1005 Spell It Right

🌟字符串

原题链接


C++
若未特殊标明,以下题解均写用C++

// 字符串处理
#include <iostream>
#include <cstring>using namespace std;int main ()
{// 10^100 超过long long int 的范围// 选择使用字符串进行处理string a;cin >> a;int sum = 0;// 先求和,将 字符转换成数字for (int i = 0; i < a.length() - 1; i ++)sum += a[i] - '0';// 将刚才的 整数结果转化为字符串string s = to_string(sum);// 数组array 中的元素可以为任意数据类型// 注意 字符串是 双引号" "string arr[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};// 将所得的和转换为 consecutive words// 第一个字母前没有空格 我们需要单独处理cout << arr[s[0] - '0'];for (int i = 1; i < s.size() - 1; i ++)// 注意处理中间的空格;空格要用双引号括起来cout << " " << arr[s[i] - '0'];return 0;
}





1001 A+B Format

🌟字符串

原题链接


C++
若未特殊标明,以下题解均写用C++

#include <iostream>using namespace std;int main()
{int a, b;cin >> a >> b;string sum = to_string(a + b);int len = sum.size();for (int i = 0; i < len; i ++) {cout << sum[i];if (sum[i] == '-') continue;if ((i + 1) % 3 == len % 3 && i != len - 1)cout << ',';}return 0;
}





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

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

相关文章

软件设计师笔记-操作系统知识(二)

线程 以下是关于线程的一些关键点&#xff1a; 线程是进程中的一个实体&#xff1a;进程是操作系统分配资源&#xff08;如内存空间、文件句柄等&#xff09;的基本单位&#xff0c;而线程是进程中的一个执行单元。多个线程可以共享同一个进程的地址空间和其他资源。线程是CP…

ElasticSearch-Windows系统ElasticSearch(ES)的下载及安装

前言 下载ElasticSearch 可以进入ElasticSearch官方下载地址&#xff0c;选择与电脑系统相对应的版本&#xff1b;博主已经上传资源&#xff0c;或者点此直接免费下载&#xff0c;本次演示版本为8.14.1。 注意&#xff1a; Elasticsearch 5 需要 Java 8 以上版本&#xff1b;…

菜籽桌面4.5.0~4.5.1常见问题解答

目录 如何刷机&#xff1f; 刷机失败&#xff1f; 无法方控&#xff1f; 无法画中画? 原车音乐跟我安装的音乐一起播放&#xff1f; 原车音乐停了&#xff0c;我安装的软件也跟着没声音了&#xff1f; 调节声音时忽大忽小&#xff1f; 怎么安装软件&#xff1f; 软件…

探究互联网领域知识,解密数字化时代神秘面纱

随着信息时代的不断发展&#xff0c;互联网的发展呈现出爆炸式的增长&#xff0c;以至于引起广泛的关注和深入的探究。互联网作为一个庞大的网络体系&#xff0c;涵盖着无穷无尽的信息和知识&#xff0c;其背后的科技和应用已经改变了人们的生活&#xff0c;产生了翻天覆地的变…

easyexcel导出数据格式时,设置数值格式

easyexcel导出数据格式时&#xff0c;设置数值格式 ExcelProperty(value"得分", index1) NumberFormat("0.00_ ") private Double score;加注解NumberFormat("0.00_ ")&#xff0c;注意需要有下划线和空号 如果还不生效&#xff0c;需要修改pom…

在 JavaScript 中处理异步操作和临时事件处理程序

关键技术和设计总结 使用 Promise 和 then 进行异步操作: 我们通过使用 Promise 来处理异步操作&#xff0c;确保操作按顺序执行。在 getReportListByCurrentTime 函数中&#xff0c;返回一个 Promise 对象&#xff0c;保证在数据加载完成后调用 resolve&#xff0c;以便可以在…

锐捷网络闪耀CVPR 2024,外观异常检测方案斩获世界认可!

近日&#xff0c;锐捷网络在“视觉异常检测和创新性检测2024挑战赛”(Visual Anomaly and Novelty Detection 2024 Challenge&#xff0c;简称VAND)的少样本逻辑/结构异常检测赛道(VAND 2.0赛道2)中荣获第二名&#xff0c;并在计算机视觉顶级会议CVPR 2024上展示了这一成果&…

深入解析:npm全局安装命令的误区与正确用法

在JavaScript和Node.js开发中&#xff0c;npm&#xff08;Node Package Manager&#xff09;是管理项目依赖的得力助手。开发者经常使用npm install命令来安装所需的包。然而&#xff0c;在使用全局安装时&#xff0c;可能会遇到npm install -g和npm install --global两种命令形…

2.用BGP对等体发送路由

2.用BGP对等体发送路由 实验拓扑&#xff1a; 实验要求&#xff1a;用BGP对等体发送路由信息 实验步骤&#xff1a; 1.完成基本配置&#xff08;略&#xff09; 2.建立BGP对等体&#xff08;略&#xff09; 3.创建路由信息&#xff08;用创建一个loop back接口就能产生一个直连…

从我邮毕业啦!!!

引言 时间过的好快&#xff0c;转眼间就要从北邮毕业了&#xff0c;距离上一次月度总结又过去了两个月&#xff0c;故作本次总结。 PS: https://github.com/WeiXiao-Hyy/blog整理了后端开发的知识网络&#xff0c;欢迎Star&#xff01; 毕业&#x1f393; 6月1号完成了自己的…

el-form表单实现校验

前端表单实现&#xff0c; rules 属性传入约定的验证规则&#xff0c;并将 form-Item 的 prop 属性设置为需要验证的特殊键值即可。 <el-form ref"ruleFormRef" :model"interviewForm" label-position"left" require-asterisk-position"…

Construct公司 从 0 到 1 基于 Kitex+Istio 的微服务系统建设

本文根据 2024 年 5 月 25 日在上海举办的“云原生✖️AI 时代的微服务架构与技术实践”CloudWeGo 技术沙龙上海站活动中&#xff0c;Construct 服务端总监 Jason 的演讲《从 0 到 1 基于 Kitex Istio 的微服务系统建设》整理而来。 在微服务架构的浪潮中&#xff0c;企业面临…

k8s_如何配置 containerd 使用镜像加速拉取docker.io上的镜像

在 Kubernetes 使用 containerd 作为容器运行时&#xff0c;可以通过配置 containerd 来使用镜像网站&#xff08;镜像仓库&#xff09;拉取镜像。这可以通过修改 containerd 的配置文件来实现。以下是详细步骤&#xff1a; 步骤 1&#xff1a;安装 containerd (如果已安装&am…

STM32学习和实践笔记(38):RTC实时时钟实验

1.STM32F1 RTC介绍 STM32 的实时时钟&#xff08; RTC&#xff09;是一个独立的定时器。 STM32 的 RTC 模块拥有一组连续计数的计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置…

事务的特性-原子性(Atomicity)、一致性(Consistency)、隔离性(Asolation)、持久性(Durability)

一、引言 1、数据库管理系统DBMS为保证定义的事务是一个逻辑工作单元&#xff0c;达到引入事务的目的&#xff0c;实现的事务机制要保证事务具有原子性、一致性、隔离性和持久性&#xff0c;事务的这四个特性也统称为事务的ACID特性 2、当事务保持了ACID特性&#xff0c;才能…

【精选】数据治理项目实施(合集)06——数据标准在数据治理中的落地实践

导读 本文对数据标准管理进行了深入探讨。重点介绍了数据标准的定义&#xff0c;实施路线和具体标准定义的内容&#xff0c;并总结了企业开展数据标准管理面临的常见问题&#xff0c;由于编写的水平和时间有限&#xff0c; 难免有所纸漏&#xff0c; 欢迎大家批评指正。 在现实…

Elasticsearch 优缓存和分片策略的影响

在Elasticsearch中&#xff0c;缓存机制和分片策略是影响其性能的关键因素。合理配置和使用这些机制&#xff0c;可以显著提升Elasticsearch的查询性能和系统稳定性。本文将深入探讨Elasticsearch的缓存机制和分片策略&#xff0c;并分析它们对系统性能的影响。 一、Elasticse…

MyBatis-关联查询的对象是集合的处理

用户和角色之间是多对多的关系&#xff0c;也就是说&#xff0c;一个用户可以有多个角色与之绑定&#xff0c;所以在User对象中&#xff0c;角色的属性就必须是一个集合Set或者List&#xff0c;这里我们就用List集合在做例子&#xff1a; 1.怎么在Mybatis中实现关联的List集合对…

k8s流控平台apiserver详解

一、简单理解认识apiserver 1.主要功能 认证 鉴权 准入 mutating validating admission 限流 2.概念 apiserver保护etcd&#xff0c;缓存机制&#xff0c;有缓存直接返回&#xff0c;没缓存再去查看etcd,apiserver是担任和其他平台同信并认证 3.访问控制概览…

ChatGPT不受支持的国家和地区

截至目前&#xff0c;OpenAI的ChatGPT在以下国家和地区不受支持&#xff1a; 中国俄罗斯朝鲜古巴伊朗叙利亚乌克兰&#xff08;有特定例外&#xff09; 从这些国家访问或提供访问ChatGPT的服务可能会导致账户被封锁或暂停。此政策旨在确保遵守当地法规和OpenAI的服务条款。 下…