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(s[i])判断当前字符是否为数字

using namespace std;

int main(){

string s;

while(cin>>s){

string result;

int i=0;

int len=s.length();

while(i<len){

if(s[i]=='@'){

result+='@';

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

}

else if(isdigit(s[i])){

int n=s[i]-'0';

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

result.append(n+1,next);

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

}

else {

result+=s[i];

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<<result[k];

}

}

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 nums[1000];

int count=0;

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

while(i<n){

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

while(i<n&&line[i]=='5') i++;

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

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

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

while(i<n&&line[i]!='5') i++;

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

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

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

int num=stoi(numstr);

nums[count++]=num;

}

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

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

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

cout<<nums[j];

}

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

背单词:

相关推荐
数据科学小丫2 分钟前
算法:逻辑回归
算法·机器学习·逻辑回归
爱写代码的小朋友9 分钟前
基于多约束遗传算法的中小学排座位优化模型研究
linux·人工智能·算法
один but you12 分钟前
unorder_map 和unorder_set
算法·哈希算法·散列表
sheeta199824 分钟前
LeetCode 每日一题笔记 日期:2026.05.20 题目:2657. 找到前缀公共数组
笔记·算法·leetcode
无限进步_30 分钟前
C++异常机制:抛出、捕获与栈展开
开发语言·c++·安全
数智工坊41 分钟前
【UniT论文阅读】:用统一物理语言打通人类与人形机器人的知识壁垒
论文阅读·人工智能·深度学习·算法·机器人
王老师青少年编程43 分钟前
csp信奥赛C++高频考点专项训练之前缀和&差分 --【一维前缀和】:宝石串
c++·前缀和·csp·高频考点·信奥赛·宝石串
梓䈑43 分钟前
【算法题攻略】模拟
c++·算法
Evand J1 小时前
【课题推荐与代码介绍】卡尔曼滤波器正反向估计算法原理与MATLAB实现
开发语言·算法·matlab
DFT计算杂谈1 小时前
VASP新手入门: IVDW 色散修正参数
linux·运维·服务器·python·算法