水果价格(循环)-基础题28th + 求奇数的乘积(循环)-基础题29th + 求最晚和最早日期(循环)-基础题30th
本文摘要讨论了智能体学习与感知的两个关键方面。在程序性学习中,智能体通过奖惩机制(如棋类游戏)逐步优化行为;在陈述性学习中,智能体通过扩展知识库(如运动员调整策略)来改进决策。感知方面,智能体需要处理传感器数据,简单的陀螺仪信号可直接编码,而复杂的语音图像识别则需额外处理。响应生成可能简单(直接执行)或复杂(语言生成),这使得图像处理、自然语言理解等成为重要研究领域。这些属性构成了智能体发展的基础
水果价格
属于循环的内容
题目
- 问题描述
一家水果店出售四种水果,每公斤价格的苹果(代码为a)1.5元,橘子(代码为o)1.4元,香蕉(代码为b)1.48元,菠萝(代码为p)1.08元。编一个程序,使售货员只要在键盘上打入货品的代码及重量,计算机将显示货品名、单价、重量及总价。 - 输入说明
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。
每组测试数据的第一行为一个整数m,表示有m件货品要被购买。在接下来的m行中,每行输入两个值d,g。d表示货品的代码,g表示重量。两组数据之间没有多余的空行。 - 输出说明
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的终端)依次输出一组对应的答案。对应每组输入,输出货品名、单个总价及全部总价。具体格式参照样例输出:第一行apple前为7个空格,之后为2个空格,其他水果名后都是1个空格,sum后没有空格;第二行price后有2个空格,其后关于价格的表示多为占7格2位小数且左对齐,但其中pineapple为占10格2位小数且左对齐,注意sum的价格仍然占7格,如第一组样例中的54.60后还有2个空格;第三行weight后有1个空格,其后的数据与第二行一致。每两组数据之间有一个空行,最后一组测试数据之后没有空行。 - 输入范例
4
a 10
o 10
b 10
p 10
2
a 5.7
a 3.8
- 输出范例
apple orange banana pineapple sum
price 15.00 14.00 14.80 10.80 54.60
weight 10.00 10.00 10.00 10.00 40.00
apple orange banana pineapple sum
price 14.25 0.00 0.00 0.00 14.25
weight 9.50 0.00 0.00 0.00 9.50
解题思路
- 解答这题的思路主要在于怎样存储水果的信息以保证输出时可以迅速找到对应的信息,在尝试了各种方式的情况下,我认为使用数组存储是简单便捷的,每一个数组的0,1,2,3的数对应一种水果,在输出时就更直接便捷。
- 对于格式输出,这题比较复杂,要仔细注意,其中占多少格,左对齐用以下格式:
cout<<left;
for(int i=0;i<4;i++){
cout<<setw(widths[i])<<fixed<<setprecision(2)<<totals[i];
}
cout<<setw(7)<<fixed<<setprecision(2)<<sumt<<endl;
整体代码
#include<iostream>
#include<iomanip>
#include<string>
//每公斤价格的苹果(代码为a)1.5元,橘子(代码为o)1.4元,香蕉(代码为b)1.48元,菠萝(代码为p)1.08元。
using namespace std;
int main(){
string names[4]={"apple","orange","banana","pineapple"};
string codes[4]={"a","o","b","p"};
double prices[4]={1.5,1.4,1.48,1.08};
int widths[4]={7,7,7,10};
bool first=true;
int m;
while(cin>>m){
if(!first) cout<<endl;
first=false;
double weights[4]={0.00};
double totals[4]={0.00};
double sumw=0,sumt=0;
for(int i=0;i<m;i++){
string code;
double weight;
cin>>code>>weight;
for(int j=0;j<4;j++){
if(codes[j]==code){
weights[j]+=weight;
}
}
}
for(int i=0;i<4;i++){
totals[i]=weights[i]*prices[i];
sumw+=weights[i];
sumt+=totals[i];
}
cout<<" apple orange banana pineapple sum"<<endl;
cout<<"price ";
cout<<left;
for(int i=0;i<4;i++){
cout<<setw(widths[i])<<fixed<<setprecision(2)<<totals[i];
}
cout<<setw(7)<<fixed<<setprecision(2)<<sumt<<endl;
cout<<"weight ";
for(int i=0;i<4;i++){
cout<<setw(widths[i])<<fixed<<setprecision(2)<<weights[i];
}
cout<<setw(7)<<fixed<<setprecision(2)<<sumw<<endl;
}
return 0;
}
注意事项
- 注意最后一行需要换行不是因为格式需要空行,而是正确输出就是从新的一行开始的,所以最后一行不要忘记换行。
求奇数的乘积
属于循环的内容
题目
- 问题描述
给你n个整数,求他们中所有奇数的乘积。 - 输入说明
输入数据包含两行,第一行为一个数为n,表示第二行将输入n个整数。你可以假设这n个数据中必定至少存在一个奇数。 - 输出说明
输出一个整数。 - 输入范例
5
3 0 4 6 5
- 输出范例
15
解题思路
- 本题特别简单,只需要判定每次是不是奇数,然后进行相乘。
整体代码
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int x=1;
for(int i=0;i<n;i++){
int a;
cin>>a;
if(a%2!=0){
x*=a;
}
}
cout<<x<<endl;
}
注意事项
- 注意乘机初始值要设为1,不然怎么乘都是0。
求最晚和最早日期
属于循环的内容
题目
- 问题描述
输入N个日期,每个以年、月、日的顺序读入,打印输出最晚的日期、最早的日期。 - 输入说明
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据由多行组成。每组测试数据的第一行输入一个整数N(0<N<20),表示有N个日期。其后N行每行有三个整数Y(1≤Y≤2015),M(1≤M≤12),D(1≤D≤31)表示一个日期。 - 输出说明
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的文本终端)输出两行,每行包括3个整数,第一行为最晚日期,第二行为最早日期,整数之间以一个空格分隔,行首与行尾无空格,所有数据前后没有多余的空行,两组数据之间也没有多余的空行。 - 输入范例
3
2015 3 2
2011 4 15
1 1 1
- 输出范例
2015 3 2
1 1 1
解题思路
- 本题首先定第一个出现的日期为最早日期和最晚日期,最后通过一次次比较更新最早日期和最晚日期。
整体代码
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int y_early,m_early,d_early,y_last,m_last,d_last;
bool first=true;
for(int i=0;i<n;i++){
int y,m,d;
cin>>y>>m>>d;
if(first){
y_early=y;
m_early=m;
d_early=d;
y_last=y;
m_last=m;
d_last=d;
}
first=false;
if(y_early>y){
y_early=y;
m_early=m;
d_early=d;
}else if(y_early==y){
if(m_early>m){
y_early=y;
m_early=m;
d_early=d;
}else if(m_early==m){
if(d_early>d){
y_early=y;
m_early=m;
d_early=d;
}
}
}
if(y_last<y){
y_last=y;
m_last=m;
d_last=d;
}else if(y_last==y){
if(m_last>m){
y_last=y;
m_last=m;
d_last=d;
}else if(m_last==m){
if(d_last>d){
y_last=y;
m_last=m;
d_last=d;
}
}
}
}
cout<<y_last<<" "<<m_last<<" "<<d_last<<endl;
cout<<y_early<<" "<<m_early<<" "<<d_early<<endl;
return 0;
}
注意事项
- 记得定义初始值,不要一直使它为0。
英文段落翻译
自己翻译
在一些事例里,一个智能体的回应随着智能体的学习提高。这能够表现为提高程序上的知识(学习“怎样”)或者存储分类知识(学习“什么”)的形式。学习程序知识通常包括一个反复试验的进程,通过这些一个智能体能够学习正确的行为即因为较差的行为被惩罚和较好的行为被奖励。通过这种方法,智能体能够提高,随着时间流逝,提升他们在竞争比赛中的能力,例如,西洋跳棋和国际象棋。学习分类知识,通常以在一个智能体的知识存储中扩大或交替因素为形式。例如一个棒球运动员必须重复调整他的或她的知识数据库从对于未来的事件决定的每一次合理的回应。
为了生产对于刺激合理的回应,一个智能体必须理解,从它的传感器中接收到的刺激。那就是说一个智能体必须能够从它的传感器生产的数据中摘录信息,或者以另一种说法,一个智能体必须能够察觉。在一些事例里,这是一个直接的进程。从一个陀螺仪中获得的信号是简单的以与确定反应的计算兼容的形式进行编码。但是在其他事例从输入数据中提取信息是困难的。例如,理解演讲和图片。否则,智能体必须能够以与其执行器兼容的词语确切地表述其反应。这可能是一个直接的进程,或者它可能要求一个智能体确切地进行回应即完整地说出句子,意思是这个智能体必须产生话语。从而,一些主题,例如图片处理和分析,自然语言理解和演讲产生是非常重要的研究领域。
我们已经识别的智能体的属性代表着过去,同时也是现在的研究领域。当然,他们不完全是独立于彼此的。我们想要提升拥有的所有智能体,生产出这样一种智能体,他们能理解从他们的环境中接收到的数据,并且通过一种目标是最大化智能体的能力的学习进程提升新的回应方式。然而,通过,孤立的变化的合理表现类型和追求他们独立,研究者获得一个支点能够之后联合在其他领域的进步去生产更多的智能主体。
AI翻译
在某些情况下,智能体的反应会随着其学习过程而逐步改善。这可能表现为习得程序性知识(学习“如何做”)或存储陈述性知识(学习“是什么”)。学习程序性知识通常涉及试错过程,智能体通过因不良动作受罚、因良好动作受赏来学习恰当的行为。遵循此方法,研究人员已开发出能在跳棋、国际象棋等竞技游戏中随时间提升能力的智能体。学习陈述性知识通常表现为扩展或修改智能体知识库中的“事实”。例如,棒球运动员必须反复调整其知识数据库,未来事件的合理反应正基于此而产生。
为对刺激作出合理反应,智能体必须“理解”其传感器接收到的刺激。也就是说,智能体必须能够从其传感器产生的数据中提取信息,换言之,智能体必须具备感知能力。在某些情况下,这是个直接的过程。从陀螺仪获取的信号易于编码为与响应计算兼容的形式。但在其他情况下,从输入数据中提取信息则十分困难,例如理解语音和图像。同样地,智能体也必须能够以与其执行器兼容的方式构建响应。这可能是个直接的过程,也可能需要智能体将响应构建为完整的口语句子——这意味着智能体必须具备语音生成能力。相应地,图像处理与分析、自然语言理解、语音生成等课题便成为重要的研究领域。
我们在此指出的智能体属性,既代表了历史研究方向,也涵盖了当前的研究领域。当然,这些属性并非彼此完全独立。我们的理想是开发出集所有属性于一身的智能体:它们能理解从环境中接收的数据,并通过以最大化自身能力为目标的学习过程,发展出新的反应模式。然而,通过将各类理性行为分解并独立研究,研究人员获得了立足点,未来可与其他领域的进展结合,从而创造出更智能的智能体。
下一篇
待续
更多推荐

所有评论(0)