2026.2.19——OJ89-91题

T89:回文问题------字符串

代码实现:

#include <iostream>

#include <string>

using namespace std;

int main(){

string s;

while(cin>>s){

int n=s.size();

bool huiwen=true;

for**(**int i=0,j=n-1;i<j;i++,j--){

if(s[i]!=s[j]){

huiwen=false;

break;//一旦某个对应的前后数字不相同就跳出

}

}

cout<<(huiwen?"Yes":"No")<<endl;

}

return 0;

}

个人思考:

这道题输入字符串之后,需要用两个变量来遍历,一个从头一个从尾,看是否相等,不等则设置一个布尔变量huiwen为false,然后直接break跳出,相同则继续检查,最后输出结果。

T90:字符串中找整数------字符串

代码实现:

//法一:边扫描边累加数值

#include <iostream>

#include <string>

#include <cctype> //提供isdigit(ch)这个函数

using namespace std;

int main(){

string line;

while(getline(cin,line)){

int nums[500],cnt=0;

bool inNumber=false;

int cur=0;

for(char ch:line){

if(isdigit(ch)){//如果是十进制数字字符

if(inNumber){//如果已经在数字段,追加到当前值末尾

cur=cur*10+(ch-'0');

}

else{//如果刚进入数字段,则初始化当前值为该数字

cur=ch-'0';

inNumber=true;

}

}

else{//如果不是十进制数字字符

if(inNumber){//如果在数字段,说明数字段结束,需要存入数组

nums[cnt++]=cur;

inNumber=false;

}

//如果非数字且不在数字段就没有任何操作

}

}

//处理行尾可能未存储的数字

//为什么需要这一行?代码逻辑是遇到非数字时才把当前累计的数字存起来,万一如果以数字结尾,最后一段数字就没法被存下来。

if(inNumber) nums[cnt++]=cur;

//输出结果

cout<<cnt;

for(int i=0;i<cnt;i++){

cout<<" "<<nums[i];

}

cout<<endl;

}

return 0;

}

个人思考:

这道题比较复杂,首先需要一个数组来存储找到的整数,然后一个变量来存储当前存储的个数,还需要一个布尔变量来标记当前是否是数字,以及cur来表示每一个数字段的数字值为多少。接着开始遍历每个字符,如果是数字,接着判断是否在数字段,在则计算当前值,不在则初始化为该数字。如果不是数字,接着判断是否在数字段,在则说明遇到了分割的地方,把当前值存下来,如果不在则不做任何操作。最后需要处理行尾可能遗留的数字,//为什么需要这一行?代码逻辑是遇到非数字时才把当前累计的数字存起来,万一如果以数字结尾,最后一段数字就没法被存下来。最后输出数字的个数以及对应的值。

T91:乒乓球------字符串

代码实现:

#include <iostream>

#include <string>

#include <cstdlib>//用于abs()函数

using namespace std;

void pingpang(const string& seq,bool&firstgroup){//seq 是只包含 W L 的字符串,表示一场完整的比赛得分序列

//11分制

int a11=0,b11=0;//当前局的双方得分

int res11[100][2];//存储11分制所有已结束局比分的数组,每行存储[a,b]

int cnt11=0;

//21分制

int a21=0,b21=0;

int res21[100][2];

int cnt21=0;

for(char ch:seq){

if(ch=='W'){//明明得分

a11++;

a21++;

}

else{//对方得分

b11++;

b21++;

}

if((a11>=11||b11>=11)&&abs(a11-b11)>=2){

res11[cnt11][0]=a11;

res11[cnt11][1]=b11;

cnt11++;

a11=b11=0;

}

if((a21>=21||b21>=21)&&abs(a21-b21)>=2){

res21[cnt21][0]=a21;

res21[cnt21][1]=b21;

cnt21++;

a21=b21=0;

}

}

//处理最后一局

if(a11||b11){

res11[cnt11][0]=a11;

res11[cnt11][1]=b11;

cnt11++;

}

if(a21||b21){

res21[cnt21][0]=a21;

res21[cnt21][1]=b21;

cnt21++;

}

**//**输出

if(!firstgroup) cout<<endl;

firstgroup=false;

//输出11分制所有局比分

for(int i=0;i<cnt11;i++){

cout<<res11[i][0]<<":"<<res11[i][1]<<endl;

}

cout<<endl;//11分制和21分制之间空一行

//输出21分制所有局比分

for(int i=0;i<cnt21;i++){

cout<<res21[i][0]<<":"<<res21[i][1]<<endl;

}

}

int main(){

string line;// 当前读入的一行

string total;// 累积当前组的 W/L 字符序列 ( 不含 E)

bool firstgroup=true;

while(getline(cin,line)){

//遍历当前行的每一个字符

for(char c:line){

if(c=='E'){

//遇到E:表示当前组比赛结束

if(!total.empty()){//如果累积序列非空,则处理该组

pingpang(total,firstgroup);

total.clear();//清空total,准备下一组

}

//忽略E之后的所有字符,直接跳出本行的遍历

break;

}

else if(c=='W'||c=='L'){

//有效得分字符,追加到累积序列

total+=c;

}

//其他字符(如空格、换行)忽略

}

// 如果本行没有 E ,继续读下一行,继续累积 total

}

//处理输入末尾可能残留的一场比赛(没有以E结尾)

if(!total.empty()){

pingpang(total,firstgroup);

}

return 0;

}

个人思考:

这道题比较繁琐,用两个二维数组来存储两种模式下的已结束局的比分,以及cnt11和cnt21来记录比赛的局数,接着根据比赛规则来统计明明和对方的比分,然后通过if条件来判断当前的比分。特别注意需要单独处理最后一局,原因是:比赛可能在没有达到一局正常结束条件时( 遇到 E 表示比赛结束,或者输入结束**)提前终止。** 最后输出11分制所有局比分和21分制所有局比分。这里把整个过程写成一个**void pingpang(const string& seq,bool&firstgroup)**函数,通过调用pingpang(total,firstgroup);来实现整个过程。注意:string total;// 累积当前组的 W/L 字符序列 ( 不含E), while(getline(cin,line))循环里有四种情况:(1)if(c=='E')(2)else if(c=='W'||c=='L')(3)//其他字符(如空格、换行)忽略 (4)/如果本行没有 E ,继续读下一行,继续累积 total,别忘了

//处理输入末尾可能残留的一场比赛(没有以E结尾)if(!total.empty()){pingpang(total,firstgroup);}

英语翻译:

P63:在20世纪70年代,计算机芯片制造商开始大规模生产微处理器------这种电子电路是计算机中主要的信息处理中心。这项新技术通过大幅降低计算机制造成本、显著提升处理速度,彻底改变了计算机行业。微处理器为个人计算机的出现铺平了道路,而个人计算机的普及又引发了计算机应用使用量的爆发式增长。在20世纪70年代初至80年代之间,计算机科学领域迅速扩张,旨在为个人计算机开发新的应用程序,并推动计算机行业的技术进步。

早期开展的许多研究成功过开始通过个人计算机走向大众,而这些早起软件大多源自现有的概念和系统。

chip:芯片,集成电路片

mass-produce:大规模生产,批量生产

circuity:电路系统,电路元件

revolutionized:彻底变革,使发生革命性变化

advent:出现,到来

P64:计算机科学家们不断拓展计算机与信息系统的前沿领域:他们率先设计更复杂、更可靠、功能更强大的计算机;构建计算机网络以高效交换海量信息;并探索让计算机具备智能行为的方法。随着计算机日益成为现代社会不可或缺的组成部分,计算机科学家们致力于解决新问题,并发明更优的方法来应对现有问题。

pioneer:开创,开拓,率先从事

integral:不可或缺的,必不可少的,构成整体所必需的

strive to:努力,致力于,力求

P65:计算机科学的目标范围十分广泛,从探索如何更好地教育人们使用现有计算机,到对那些可能在未来数十年内都不具备可行性的技术与方法进行高度前瞻性的研究。在所有这些具体目标之下,潜藏着一个共同的愿望:通过更有效地利用信息,改善人类当下及未来的生存状况。

speculative:推测的、猜测的;(尤指对未来)探索性的、前瞻性的

viable:可行的、能实现的;有生存能力的

underlying:潜在的、根本的;在...... 之下的

背单词:

相关推荐
CoderCodingNo7 小时前
【NOIP】2011真题解析 luogu-P1003 铺地毯 | GESP三、四级以上可练习
算法
iFlyCai7 小时前
C语言中的指针
c语言·数据结构·算法
Laurence7 小时前
C++ 引入第三方库(一):直接引入源文件
开发语言·c++·第三方库·添加·添加库·添加包·源文件
查古穆8 小时前
栈-有效的括号
java·数据结构·算法
再一次等风来8 小时前
近场声全息(NAH)仿真实现:从阵列实值信号到波数域重建
算法·matlab·信号处理·近场声全息·nah
汀、人工智能8 小时前
16 - 高级特性
数据结构·算法·数据库架构·图论·16 - 高级特性
大熊背8 小时前
利用ISP离线模式进行分块LSC校正的方法
人工智能·算法·机器学习
XWalnut8 小时前
LeetCode刷题 day4
算法·leetcode·职场和发展
蒸汽求职8 小时前
机器人软件工程(Robotics SDE):特斯拉Optimus落地引发的嵌入式C++与感知算法人才抢夺战
大数据·c++·算法·职场和发展·机器人·求职招聘·ai-native
charlee449 小时前
最小二乘问题详解17:SFM仿真数据生成
c++·计算机视觉·sfm·数字摄影测量·无人机航测