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:跨学科的

背单词:

相关推荐
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧4 小时前
C++学习:基础知识的掌握
c++·visualstudio
江畔柳前堤4 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore5 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考7 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX8 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面8 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号8 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽9 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI9 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
C++ 老炮儿的技术栈10 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio