2026.2.23——OJ101-103题

T101:找出质数------字符串

代码实现:

#include <iostream>

#include <string>//调用s.substr()取子串,s.size()取长度,getline(cin,s)读取一行输入

#include <climits>//防止stoi转换溢出

using namespace std;

bool isprime(int n){

if(n<2) return false;

if(n==2) return true;

if(n%2==0) return false;

for(int i=3;i*i<=n;i+=2){

if(n%i==0) return false;

}

return true;

}

int main(){

string s;

while(getline(cin,s)){

if(s.empty()) continue;//跳过空行

int best=-1;// 记录当前找到的最佳质数, -1 表示未找到

for(size_t len=4;len>=1;len--){

int maxprime=-1;// 在当前长度下找到的最大质数

//遍历所有起始位置,截取长度为len的子串

for(size_t i=0;i+len<=s.size();i++){

string sub=s.substr(i,len);//获取子串

int num =stoi(sub);//将子串转换为整数,自动忽略前导0

if(isprime(num)){

if(num>maxprime) maxprime=num;//更新当前长度的最大值

}

}

//如果当前长度找到了质数

if(maxprime!=-1){

best=maxprime;//记录该质数(由于是从长到短查找,第一个找到的长度就是最长)

break;//跳出循环,不再检查更短长度

}

}

cout<<best<<endl;

}

return 0;

}

个人思考:

这道题通过从长到短遍历所有可能的子串,将子串转换为整数并判断是否为质数,从而找出最长的质数子串(长度不超过4)。若存在多个相同长度的质数,则取数值最大的一个。代码中利用了stoi自动忽略前导零的特性,并采用优化的质数判断(只需检查到平方根)。

T102:翻译字符串------字符串

代码实现:

#include <iostream>

#include <string>//s.length()获取输入字符串长度//result.append()//result.size()获取字符串长度

#include <cctype>//isdigit(si)判断当前字符是否为数字

using namespace std;

int main(){

string s;

while(cin>>s){

string result;

int i=0;

int len=s.length();

while(i<len){

if(si=='@'){

result+='@';

break;//@是结束标志,后面不再处理

}

else if(isdigit(si)){

int n=si-'0';

char next=si+1;//一定有下一个字符(因为最后是'@')

result.append(n+1,next);

i+=2;//跳过数字和它后面的字符

}

else {

result+=si;

i++;

}

}

//每三个字符一组输出

for(size_t j=0;j<result.size();j+=3){

if(j!=0) cout<<' ';

for(size_t k=j;k<j+3&&k<result.size();k++){

cout<<resultk;

}

}

cout<<endl;

}

return 0;

}

个人思考:

这道题读懂题目分类处理,遇到数字要重复其后字符并跳过两个位置,利用isdigit判断数字,用append方便地添加重复字符;以@结尾,要跳出循环。输出时每三个字符为一组,用空格分隔,最后可能不足三个,需要控制边界。

T103:分割数字并排序------字符串

代码实现:

#include <iostream>

#include <string>

#include <algorithm>

using namespace std;

int main(){

int T;

cin>>T;

cin.ignore();//跳过第一行末尾的换行

while(T--){

string line;

getline(cin,line);

int nums1000;

int count=0;

int i=0,n=line.size();//i 为当前扫描位置, n 为字符串长度

while(i<n){

//跳过所有连续的'5'

while(i<n&&linei=='5') i++;

if(i>=n) break;//如果已经到达末尾,则退出循环

int start =i;// 记录当前整数的起始位置

//继续扫描直到遇到'5'或字符串末尾

while(i<n&&linei!='5') i++;

//提取子串[start,i)范围内的字符,即当前整数对应的字符串

string numstr=line.substr(start,i-start);

//将数字串转换为整数,stoi会自动忽略前导0

int num=stoi(numstr);

numscount++=num;

}

sort(nums,nums+count);//排序

for(int j=0;j<count;j++){

if(j>0) cout<<' ';

cout<<numsj;

}

cout<<endl;// 每组输出换行

}

return 0;

}

个人思考:

这道题是将5作为分隔符,需要正确处理连续多个5的情况,避免空串;利用stoi自动忽略前导零的特性,大大简化了整数转换过程。同时还用到了string numstr=line.substr(start,i-start);//提取子串[start,i)范围内的字符,即当前整数对应的字符串。

英语翻译:

P75:V. 计算机科学与其他学科的联系

理论计算机科学的许多研究方法都源自数学和逻辑学。数值计算领域的研究与数学领域的数值分析研究存在重叠。计算机架构师与设计计算机电路的电气工程师紧密合作。

mathematics:数学

logic:逻辑学

overlap:重叠;与...... 部分重合

numerical:数值的;用数字表示的

architects:架构师;设计师

circuit:电路;回路

P76:除了这些历史渊源之外,人工智能研究与心理学、神经生理学和语言学之间也存在着紧密联系。人机交互研究同样与心理学相关联。机器人学家在设计新型机器人时,既要与机械工程师合作,也要与生理学家合作。

P77:计算机科学与几乎所有使用计算机的学科都存在间接联系。其他领域开发的应用程序往往需要与计算机科学家协作,后者贡献自己在算法、数据结构、软件工程和现有技术方面的知识。反过来,计算机科学家也有机会观察计算机的新颖应用,并从中获得对其用途的更深刻理解。这些联系使得计算机科学成为一个高度跨学科的研究领域。

collaboration:协作、合作

algorithm:算法

novel:新颖的、新奇的

interdisciplinary:跨学科的

背单词:

相关推荐
罗西的思考13 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队16 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
用户805533698031 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
To_OC1 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC1 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK1 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境2 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
_清歌2 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法
统计实现局2 天前
SVD 的三步走:双对角化、Givens 收敛、排序
算法