T98:加法器------字符串

代码实现:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
string line;
while(getline(cin,line)){
if(line.empty()) continue;
istringstream iss(line);
string token;
long long sum=0;
while(getline(iss,token,'+')){
sum+=stoll(token);// 将数字字符串转换为整数并累加
}
cout<<sum<<endl;// 输出结果并换行
}
return 0;
}
个人思考:
istringstream iss(line); 创建一个字符串流 iss,将当前行的字符串 line 绑定到流中,便于按分隔符提取内容。
string token; 用于存储被加号分割出来的每个数字字符串。
long long sum = 0; 定义长整型变量 sum 并初始化为0,用于累加和。因为表达式长度不超过1000,数字最大30000,但多个数累加可能超出 int 范围,使用 long long 更安全。
while (getline(iss, token, '+')) 循环从 iss 中读取子串,直到遇到分隔符 '+' 或流结束。每次读取的结果存入token,例如对于表达式 "1+2+3",依次得到 "1"、"2"、"3"。
sum += stoll(token); stoll 函数将 token(字符串)转换为 long long 整数,并累加到 sum 中。stoll 能正确处理正整数字符串。
T99:构造序列------字符串

代码实现:
#include <iostream>
#include <string>
using namespace std;
int main(){
string seq[10];
seq[1]="11";
for(int n=2;n<=9;n++){
**const string& prev=seq[n-1];//**上一轮的序列
string next;
int len=prev.length();
//遍历上一轮序列中每一对相邻的数字
for(int i=0;i<len-1;i++){
next.push_back(prev[i]);//先将左边的数字加入新序列
int a=prev[i]-'0';
int b=prev[i+1]-'0';
if(a+b==n){//如果相邻两个数字之和等于当前的轮数
next.push_back('0'+n);//则在它们之间插入数字n(转为字符)
}
}
next.push_back(prev[len-1]);// 最后将最后一个数字加入新序列
seq[n]=next;// 保存本轮生成的序列
}
int n;
while(cin>>n){
cout<<seq[n]<<endl;
}
return 0;
}
个人思考:
这行代码const string& prev = seq[n - 1]; 的作用是创建一个常量引用 prev,让它指向数组 seq 中索引为 n-1 的元素(即上一轮的序列字符串)。从初始的"11"开始,每一轮根据前一个序列,在相邻两个数字之和等于当前轮数的地方插入该数字。这种构造方式类似于一种递归的"插入"过程,使得每个新序列都蕴含着前一个序列的相邻关系信息。通过手动推导前几个序列(如"11"→"121"→"13231"→"1432341"),可以发现序列长度迅速增长,且数字分布似乎与轮数有某种对称性。
T100:纯粹合数------字符串

代码实现:
#include <iostream>
using namespace std;
//判断一个数是否为合数(大于1且不是质数)
bool is_composite(int x){
if(x<2) return false;
for(int i=2;i*i<=x;i++){
if(x%i==0) return true;
}
return false;
}
//去掉一个数的最高位,返回剩下的数:104->4、100->0
int remove_highest(int x){
int divisor=1;
int temp=x;
while(temp>=10){
divisor*=10;
temp/=10;
}
return x % divisor;
}
//判断一个数是否为纯粹合数
bool is_pure(int x){
if(x==0) return true;
if(x<10){
return (x==4||x==6||x==8||x==9);
}
if(!is_composite(x)) return false;//本身必须是合数
int rest=remove_highest(x);//去掉最高位
return is_pure(rest);//递归检查剩余部分
}
int main(){
int pure[100];
int count=0;
int num=100;
while(count<100){
if(is_pure(num)){
pure[count++]=num;
}
num++;
}
int n;
while(cin>>n){
cout<<pure[n-1]<<endl;
}
return 0;
}

个人思考:
这道题比较难的地方在去掉最高位函数:通过循环计算与 x 位数相同的10的幂(如 100 对应 100),然后用 x % divisor 得到去掉最高位后的值。判断合数其实和之前的判断素数有异曲同工之处。
英语翻译:
P72:3. 人工智能
人工智能(AI)研究旨在让计算机和机器模仿人类的智能与感官处理能力,并通过计算机对人类行为进行建模,以加深我们对智能的理解。人工智能研究的众多分支包括机器学习、推理、认知、知识表示、问题求解、基于案例的推理、自然语言理解、语音识别、计算机视觉以及人工神经网络。
mimic:模仿、模拟
sensory:感官的、感觉的
inference:推理、推断
cognition:认知
P73:4. 机器人学
计算机科学的另一个应用广泛的领域是机器人学------ 即计算机控制的机械装置的设计与开发。机器人的复杂度跨度很大,从玩具到自动化工厂装配线不等,它们能将人类从枯燥、重复或危险的任务中解放出来。在速度、精度、一致性或清洁度要求远超人类能力的场景中,也会使用机器人。机器人学家(即从事机器人学领域研究的科学家)研究控制机器人的诸多方面,包括:
对机器人的物理属性进行建模、对机器人所处的环境进行建模、规划机器人的动作、高效地控制其机械装置、利用传感器为控制程序提供反馈、确保机器人行为的安全性。他们还研究简化控制程序创建的方法。其中一个研究方向是让机器人具备更多人类的灵巧性和适应性,这一领域与人工智能(AI)联系紧密。
complexity:复杂度、复杂性
automated:自动化的、自动运行的
assembly:装配、组装
tedious:枯燥的、冗长乏味的
repetitive:重复的、反复的
roboticists:机器人学家
sensors:传感器
dexterity:灵巧性、灵活性
P74:5. 人机交互
人机交互界面为人们使用计算机提供了途径。键盘就是一个典型的人机交互界面,它让人类可以向计算机输入指令,并在特定应用中输入文本。人机交互研究的多样性,对应着计算机用户群体和应用场景的多样性。不过,该领域有一个统一的核心主题:开发更优的交互界面,并通过实验评估其有效性。相关研究示例包括:改善残障人士使用计算机的可及性、简化程序操作流程、为虚拟现实开发三维输入与输出设备、提升手写识别与语音识别技术、为航空仪表开发平视显示器,在飞行员视野前方的屏幕上显示速度、高度、航向等关键信息。其中一个被称为可视化的研究方向,专注于以图形化方式呈现海量数据,使人们能够理解数据的关键特征。
diversity:多样性、差异性
unifying:统一的、一致的
disabilities:残疾、障碍
three-dimensional:三维的、立体的
virtual reality:虚拟现实
head-up displays:平视显示器
aircraft:飞行器、航空器
altitude:高度、海拔
visualization:可视化
graphically:以图形方式、图像化地
comprehend:理解、领会
背单词:
