计算机复试学习笔记 Day9
【摘要】本文包含三个编程题目及计算机英语翻译。第一题是汽水瓶兑换问题,通过循环模拟兑换过程,特别处理2个空瓶可借1瓶的特殊情况,计算最多可兑换的汽水瓶数。第二题求N!的最后非零位,通过边乘边去除末尾零并取模处理大数阶乘。第三题计算菜价总和并四舍五入到角,处理多组输入数据。计算机英语部分讨论了人工智能中智能体的响应层级,从基础反射行为到需要环境认知和决策的高阶响应,并指出现实世界知识应用仍是AI领域
25. 汽水瓶
题目
问题描述
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
输入说明
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
输出说明
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
个人总结
思路
采用模拟法求解。只要空瓶数大于1就继续循环兑换。每次循环中,先用总瓶数除以3算出能换多少瓶汽水,计入总数;接着计算剩余瓶数,剩余瓶数等于刚才换的汽水数(因为喝完变空瓶)加上刚才没能凑够3个而被剩下的旧空瓶(即取模部分)。
易错点
- 剩下2个空瓶时属于特殊边界情况,题目允许向老板借1个凑够3个,喝完把空瓶还回去,相当于这2个瓶子还能再换1瓶汽水,需要单独写个if判断来处理并结束循环。
- 更新下一次的瓶子数量时,不要忘了加上新喝完产生的空瓶。
- 输入以0结束,注意while循环读取的判断条件。
代码
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
while (cin >> n and n != 0){
int sum = 0; // 总共喝的数量
while (n != 0 && n != 1){
if (n == 2){ // 借一瓶
sum += 1;
n = 0;
}
// 喝完换瓶子
int drink = n / 3;
sum += drink;
n = n % 3 + drink;
}
cout << sum << "\n";
}
return 0;
}
26. 阶乘最后的非0位
题目
问题描述
N的阶乘写作N!表示小于等于N的所有正整数的乘积。阶乘会很快的变大,如13!就必须用32位整数类型来存储,70!即使用浮点数也存不下了。你的任务是找到阶乘最后面的非零位。举个例子,5!=1*2*3*4*5=120所以5!的最后面的非零位是2,7!=1*2*3*4*5*6*7=5040,所以最后面的非零位是4。
输入说明
一个不大于1000的整数N。
输出说明
共一行,输出N!最后面的非零位。
个人总结
-
必须边乘边处理:N的阶乘增长极快,long long也存不下,必须在循环中每乘一个数就处理一次。
-
去除末尾0:在循环内部,每次乘法完成后,如果结果能被10整除,就不断除以10,直到末尾没有0为止。
-
关键易错点(取模):在循环内截断数值时,不能只取个位数(不能模10),必须取较大的数(如模10000或100000)。因为乘法会产生进位,前面的数字会影响最后一位的结果,保留过少会导致精度丢失算出错误答案。
-
数据范围:虽然中间结果保留了多位,但由于常数次去0和取模,int类型足够存储,不会溢出。
-
最终输出:循环结束后,记得再次模10,只打印最后一位非零数。
代码
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
int tail = 1;
int tmp;
// long long lres = 1; // 用来调试对比答案是否正确
for (int i = 1; i <= N; i++){
tmp = tail * i;
// lres *= i;
while (tmp % 10 == 0){
tmp /= 10; //去掉结尾的0
}
// 只保留尾数
tail = tmp % 10000;
// 调试输出
// cout << "i: " << i << " tail: " << tail << " temp: " << tmp << " lres: " << lres <<"\n";
}
int res = tail % 10;
cout << res << "\n";
return 0;
}
题目3
题目
问题描述
妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐。现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵。
输入说明
输入含有一些数据组,第一行第一个数是测试组数,第二行第一个数据是菜种数,每组数据包括菜种(字串),数量(计量单位不论,一律为double型数)和单价(double型数,表示人民币元数),因此,每组数据的菜价就是数量乘上单价啊。菜种、数量和单价之间都有空格隔开的。
注意样例输入应是如下:
1
3
青菜 1 2
罗卜 2 1.5
鸡腿 2 4.2
输出说明
支付菜价的时候,由于最小支付单位是角,所以总是在支付的时候采用四舍五入的方法把分头去掉。所以,请输出一个精度为角的菜价总量。
个人总结
- 比较基础的题,注意变量类型和重置就好。
代码
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int g; // 组数
cin >> g;
for (int i = 0; i < g; i++){
int cz; // 菜种数
cin >> cz;
double sum = 0;
for (int j = 0; j < cz; j++){
// 读取这种菜的信息
string name;
double num;
double price;
cin >> name >> num >> price;
sum += num * price;
}
cout << fixed << setprecision(1) << sum << "\n";
}
return 0;
}
计算机英语翻译
Much of the research in artificial intelligence can be characterized in the context of building agents that behave intelligently, meaning that the actions of the agent's actuators must be rational responses to the data received through its sensors. In turn, we can classify this research by considering different levels of these responses.
许多关于人工智能的研究都可以表征于构建表现出智能行为的智能体,也就是说,智能体的执行器所采取的行动,必须是针对于其传感器所接收数据的理性响应。
相应的,我们可以通过这些响应的不同级别来分类人工智能研究。
The simplest response is a reflex action, which is merely a predetermined response to the input data. Higher levels of response are required to obtain more "intelligent" behavior. For
example, we might empower an agent with knowledge of its environment and require that the agent adjust its actions accordingly. The process of throwing a baseball is largely a reflex action but determining how and where to throw the ball requires knowledge of the current environment. How such real-world knowledge can be stored, updated, accessed, and ultimately applied in the decision-making process continues to be a challenging problem in artificial intelligence.
最简单的响应是反射行为,它仅仅是对于输入数据的预设响应。
为了获得更“智能”的行为,需要更高级别的反应。
例如,我们也许会赋予智能体关于环境的知识,并要求它根据环境来调整行动。
投掷棒球的过程在很大程度上是一个反射动作,但是要决定怎么扔球、在哪里扔球,则需要了解当前环境。
这些现实世界信息如何才能储存、更新、获取,并最终用于决策,仍然是人工智能领域的一大挑战。
Another level of response is required if we want the agent to seek a goal such as winning a game of chess or maneuvering through a crowded passageway. Such goal-directed behavior requires that the agent's response, or sequence of responses, be the result of deliberately forming a plan of action or selecting the best action among the current options.
如果我们希望智能体去追求诸如赢得国际象棋比赛或穿行于拥挤的通道之类的目标,则需要另一层次的响应。
这种目标导向行为要求智能体有意识地制定行动计划,或者是在当前选项中选择最合适的行动,以形成单个或一系列响应。
更多推荐


所有评论(0)