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

背单词:

相关推荐
月挽清风1 小时前
代码随想录第34天:动态规划
算法·动态规划
HCl__盐酸1 小时前
题解:Kitamasa 算法板子
算法
筱昕~呀1 小时前
冲刺蓝桥杯-DFS板块(第一天)
算法·蓝桥杯·深度优先
刘琦沛在进步1 小时前
【数据结构】学习数据结构的第一课——顺序表(静态)
数据结构·c++·学习
We་ct2 小时前
LeetCode 637. 二叉树的层平均值:BFS层序遍历实战解析
前端·数据结构·算法·leetcode·typescript·宽度优先
JobDocLS2 小时前
C++重要知识点相关代码
开发语言·c++
I_LPL2 小时前
day36 代码随想录算法训练营 动态规划专题4
java·算法·leetcode·动态规划·hot100
Mr YiRan2 小时前
C++二义性,多态,纯虚函数和模版函数
java·jvm·c++
ab1515172 小时前
2.24完成129、134、135
数据结构·算法