231008 X01第二次考试 - 题解
2023-10-17 15:00:56
发布于:新加坡
不知道大家做完感觉如何?
来自宁波的一封信
解题思路:
这道题没有什么需要注意的,直接复制题干中的文本再通过cout语句输出即可。亲身经历告诉大家,真的不要太倔强自己打一遍文字,直接复制下来就行,千万不要自己打字,万一错了都不知道!!!!!
#include <iostream>
using namespace std;
int main(){
cout << "虽然昨天的最后一题有点小问题,但我能接受。" << endl;
return 0;
}
拼图分类
题目大意:
拼图复杂度和拼图等级之间的关系:
- 拼图复杂度在1-3(包括1和3)之间 - 简单。
- 拼图复杂度在4-7(包括4和7)之前 - 中等。
- 拼图复杂度在8-10(包括8和10)之间 - 困难。
现在,ikun和小黑子会告诉你每一块拼图的色块难度,请根据以上关系对拼图进行分类。
解题思路:
对于这道题而言,通过三个if-else语句判断是否在题目中所包含的区间即可。同时由于这里使用的是else if语句,因此不需要再次判断区间的开头,只需要判断区间的结束即可。参考代码如下:
#include <iostream>
using namespace std;
int main(){
int difficulty;
cin >> difficulty;
if (difficulty <= 3){
cout << "简单" << endl;
} else if (difficulty <= 7){
cout << "中等" << endl;
} else {
cout << "困难" << endl;
}
return 0;
}
等差数列
题目大意:
若一些数字是按照一定的规律进行排列的,那么这些数字的排列就可以被称之为数列。其中,有一种很神奇的数列,这个数列的每一个数字和这个数字后面的数字的差都是一样的。例如数列:1 3 5 7 9 10
,这里的每个数字都比后一个数字小2。像这样的数列被称之为等差数列。现在请你写出一个从0开始,每两个数之间的差为K的长度为N的等差数列。
解题思路:
本题的思路不难,只需要对变量从0开始每次累加即可,并创建变量i来记录数列中的长度。
本题的话需要注意的一点是数据范围,虽然题目中保证K和N都小于int类型所能存储的最大限额,但是并不能排除当计算等差数列中,数列中的其中一项会超出int类型。例如数列:
1000000000 2000000000 3000000000 4000000000 5000000000
虽然这个数列中每一个的差都小于int类型,数列的长度也小于100,但不能排除数列中的后几项会有超出int的风险。因此需要使用long long作为替代。本题的参考代码如下:
#include <iostream>
using namespace std;
int main(){
int n, k;
cin >> n >> k;
long long current = 0;
for (int i=1; i<=n; i++){
cout << current << " ";
current += k;
}
return 0;
}
汽车加油
题目大意:
又是一个阳光明媚的早晨,Macw和他最好的朋友Vincent一起来到了天目山观看天目山的风景。可谁又曾想,天目山的山路蜿蜒崎岖,车子没开一会儿就快没油了。于是,Macw拿出他的手机查看了附近的几所加油站,每所加油站都标注了这所加油站的离Macw和Vincnet的距离。Macw想知道,有多少所加油站他们可以在汽车耗尽所有油之前到达、以及离Macw最近的加油站是哪一所加油站。
解题思路:
这道题的思路依然不难,但本题有两个难点:
-
难点一:如何求得答案。
每次读入一个加油站的坐标后,就判断这个加油站的距离是否小于等于汽车最多能开的距离,如果可以的话就将计数器total的值增加一。最后判断total是否为0,如果为零输出0和so sad。否则正常输出结果。
-
难点二:如何记录最近的一所加油站。
对于求最近的一所加油站,可以通过创建一个变量min来记录最近的一所加油站距离Macw的位置,再通过变量min_location来记录最近的一所加油站的编号。最开始,将min设置为int的极限表示目前还没有答案。接下来遍历每次输入的加油站的距离,如果输入的加油站距离比当前所记录的min小,就更新min和min_location。
本题的参考代码如下:
#include <iostream>
using namespace std;
int main(){
// 各变量的含义参照上述文本。
int n, m, total = 0;
int min = 2147483647, min_location = 0;
cin >> n >> m;
for(int i=1; i<=n; i++){
int t;
cin >> t;
// 记录最小值:不断更新最小值。
if (t < min){
min = t; // 更新的最近的加油站距离。
min_location = i; // 更新最近的加油站的编号。
}
if (t <= m){
// 如何车辆可以在耗尽油量之前到达,将计数器增加一。
total += 1;
}
}
// 特判答案是否为0。
if (total == 0){
cout << 0 << endl;
cout << "So Sad" << endl;
} else{
// 正常输出答案。
cout << total << endl;
cout << min_location << endl;
}
return 0;
}
海拔的高低变换
题目大意:
在Macw和Vincent爬山的时候,山路一直都是弯来弯去的,一会上坡一会儿下坡。Vincent坐在副驾驶都无聊透了,就拿起了他的手机在看汽车的海拔。Vincent拿出了他的纸和笔,记录了他和Macw每走一个单位距离时的海拔高度。终于,经历了将近2个小时的车程,他俩终于到达了山顶。到达山顶后,Vincent打开自己的笔记本翻看自己记录的海拔信息,他想知道自己所经过的这连续的路程内,有多少次海拔的变换。(忽略头和尾)
解题思路:
本题的核心解题思路在于记录上每个海拔坐标之前的一个海拔坐标,如果这个点的海拔坐标和上一个点的海拔坐标不同,则将答案total的值增加,意为海拔的高度产生了变化。
参考以下代码,下通过last变量记录上一个海拔的高度,n代表记录w的海拔信息的数量,t是每次输入海拔时用作判断的临时变量。其中,本题有一个特殊判断地方在于,由于第一次输入的海拔无法跟前一个海拔进行比较,因此就直接更新last变量即可,不需要再将total的数量增加。这也就是为什么题目中特别提到忽略头和尾这个要求。
此外,本题请使用long long用于存储数据(题干中有提及),否则有可能会出现数据超限的情况。
#include <iostream>
using namespace std;
int main(){
long long n, t, last;
long long total = 0;
cin >> n;
for (int i=1; i<=n; i++){
cin >> t; // 输入当前的海拔。
// 对于第一个点的特判,
// 因为第一个点无法跟上一个海拔进行比较。
if (i == 1) last = t;
if (last != t){
last = t; // 更新上一个点的海拔高度。
total += 1; // 更新答案。
}
}
cout << "Ans=" << total << endl;
return 0;
}
最长的平稳山路
题目大意:
在Macw和Vincent爬山的时候,山路一直都是弯来弯去的,一会上坡一会儿下坡。Vincent坐在副驾驶都无聊透了,就拿起了他的手机在看汽车的海拔。Vincent拿出了他的纸和笔,记录了他和Macw每走一个单位距离时的海拔高度。终于,经历了将近2个小时的车程,他俩终于到达了山顶。(这个题干跟海拔的高低变换一模一样)
到达山顶后,Vincnet打开自己的笔记本翻看自己记录的海拔信息,他想知道自己所经过的一段连续的路程内,最长的平稳山路的长度是多少,这段平坦路径的海拔是多少。其中,平稳山路指的是在一个连续的区间内,海拔没有发生过任何的变化。
解题思路:
这道题作为“海拔的高低变换”这道题的延伸题目,整体的思路与上一道题类似:也是通过last变量用于记录上一个点的海拔高度,如果上一个点的海拔高度与当前点的海拔高度相同,则可以认为这个点和之前的点可以构成一段平稳山路。
参照以下代码,last变量用于记录上一个点的海拔坐标,tmp用于记录与上一个点所能构成的最长的平稳山路的长度,ans表示的是最长的平稳山路的长度,ans_altitude表示的是最长的平稳山路的海拔高度。
通过一个for循环来遍历每一次输入的进去的海拔高度,如果现在的海拔高度跟前一个海拔高度相同(忽略第一个),则将tmp+1。如果现在的海拔高度跟前一个海拔高度不相同,则判断是否需要更新答案,同时将tmp的值设定为1,表示无法与前几个海拔构成平稳山路,只能自己自成一段平稳山路。
同时,由于本题要求在当有多个最长的平稳山路时,输出海拔最低的那一个,因此需要特殊判断一下:如果当前的tmp等于所记录的最长的平稳山路,同时当前的海拔高度比之前记录的最长的平稳山路要低,则更新答案。
#include <iostream>
using namespace std;
int main(){
// 变量的意义上文已提及。
int n, t, last, tmp = 0;
int ans = 0, ans_altitude = 0;
cin >> n;
for (int i=1; i<=n; i++){
cin >> t; // 读入当前的海拔高度。
if (i == 1) last = t; // 特判第一个海拔。
// 如果可以构成平稳山路,则将所构成的平稳山路的长度+1。
if (last == t) tmp += 1;
else {
// 否则就重新尝试构成一个新的平稳山路,默认自己就是长度为1的平稳山路。
tmp = 1;
last = t;
}
// 如果当前记录的长度比所记录的答案要长,则更新答案。
if (tmp > ans){
ans = tmp; // 更新最长的平稳山路的长度。
ans_altitude = t; // 更新最长的平稳山路的海拔。
continue;
}
// 如果有多个最长的平稳山路,则将答案更新为海拔最低的那个。
if (tmp == ans && t < ans_altitude){
ans_altitude = t; // 更新最长的平稳山路的海拔。
}
}
// 输出答案。
cout << "Length=" << ans << endl;
cout << "Altitude=" << ans_altitude << endl;
return 0;
}
全部评论 32
王老师怎么这么强!
2023-08-05 来自 浙江
2王老师强呀!给王老师打call
2023-08-05 来自 浙江
2好好好 大腿王老师
2023-08-05 来自 浙江
0
希望大家积极参与。
2023-08-03 来自 浙江
2我生病请假了哈哈哈
2023-08-04 来自 浙江
0所以你0分
2023-08-04 来自 浙江
0我没报名
2023-08-04 来自 浙江
0
有亿点难
2023-08-04 来自 浙江
1真就亿点
2023-08-04 来自 浙江
0明天的考试会稍微简单点。
2023-08-04 来自 浙江
0你咋知道的
2023-08-05 来自 广东
0
昨天的比赛大家大家都收获了乐趣,也汲取了经验。我相信大家一定对小黑子和IKUN的故事非常有兴趣对吧。今天的题不光会有小黑子的参与,还有我们耳熟能详、未见其人,先闻其身的老朋友 - Macw 的参与。今天的他们也一定能给你们带来快乐。哦对了,鉴于大家昨天这么多人都AK了,那么今天的题就要上强度了哦!
同时,昨天的最后一题由于跟小数double类型相关,每个人对小数的处理方式各不相同,C++对小数精
2023-08-04 来自 浙江
1😇
2023-08-04 来自 浙江
0
本人现在在x01昨天就做出来3道题 So Sad
2023-08-04 来自 浙江
1我看到你的排名了,已经很不错了,继续加油呀。
后面三道题确实有点难,相信你在明天的考试中取得好成绩。2023-08-04 来自 浙江
1讨伐学长!!!
出的挺好下次别出了2023-08-04 来自 浙江
1so sad
2023-08-04 来自 浙江
0
我写emo了,讨伐学长!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2023-08-04 来自 浙江
1[○・`Д´・ ○][○・`Д´・ ○][○・`Д´・ ○][○・`Д´・ ○][○・`Д´・ ○][○・`Д´・ ○][○・`Д´・ ○][○・`Д´・ ○]
2023-08-04 来自 浙江
0瑟瑟发抖(可是你昨天考的挺好的呀)
2023-08-04 来自 浙江
0可是我本来想天天考第一气死我爸妈[○・`Д´・ ○]
2023-08-04 来自 浙江
0
老哥这么有实力的
2023-08-03 来自 江苏
1题被说出的太难了。-_-||
2023-08-04 来自 浙江
0
ACGO的BUG有点多呐
2023-08-05 来自 浙江
0盲猜一下,Vincent是学长你的朋友吧?
2023-08-04 来自 浙江
0yes
2023-08-04 来自 浙江
0哦豁😊ヾ(≧▽≦*)o
2023-08-05 来自 浙江
0
提醒学长明天记得露脸
2023-08-04 来自 浙江
0答应你们
2023-08-04 来自 浙江
0好
2023-08-04 来自 浙江
0
明天露脸
2023-08-04 来自 浙江
0答应你们
2023-08-04 来自 浙江
0
能不能发一下第6题的思路
2023-08-04 来自 浙江
0(听取Wonderful Answer声一片!!!)
2023-08-04 来自 浙江
0明天早上你们就能看到了
2023-08-04 来自 浙江
0题解已经更新了,这个界面刷新一下就可以了。
2023-08-04 来自 浙江
0
能不能写一下第四题的思路???(可以吗)求求了
2023-08-04 来自 浙江
0不可以
2023-08-04 来自 浙江
0
2023-08-04 来自 浙江
0???你不发我发
2023-08-04 来自 浙江
0
学长你要不要来讲一下最后一道题
2023-08-04 来自 浙江
0卢老师已经找过我了,我说我同意了
2023-08-04 来自 浙江
1OK
2023-08-04 来自 浙江
0没想到真同意了
2023-08-04 来自 浙江
0
所经过的一段连续的路程内,最长的平稳山路的长度是多少,这段平坦路径的海拔是多少。其中,平稳山路指的是在一个连续的区间内,海拔没有发生过任何的变化。
2023-08-04 来自 浙江
0在Macw和Vincent爬山的时候,山路一直都是弯来弯去的,一会上坡一会儿下坡。Vincent坐在副驾驶都无聊透了,就拿起了他的手机在看汽车的海拔。Vincent拿出了他的纸和笔,记录了他和Macw每走一个单位距离时的海拔高度。终于,经历了将近2个小时的车程,他俩终于到达了山顶。(这个题干跟海拔的高低变换一模一样)
到达山顶后,Vincnet打开自己的笔记本翻看自己记录的海拔信息,他想知道自己
2023-08-04 来自 浙江
0的变换。(忽略头和尾)
2023-08-04 来自 浙江
0《自己的变换》
2023-08-04 来自 浙江
0
在Macw和Vincent爬山的时候,山路一直都是弯来弯去的,一会上坡一会儿下坡。Vincent坐在副驾驶都无聊透了,就拿起了他的手机在看汽车的海拔。Vincent拿出了他的纸和笔,记录了他和Macw每走一个单位距离时的海拔高度。终于,经历了将近2个小时的车程,他俩终于到达了山顶。
到达山顶后,Vincent打开自己的笔记本翻看自己记录的海拔信息,他想知道自己所经过的这连续的路程内,有多少次海拔
2023-08-04 来自 浙江
0又是一个阳光明媚的早晨,Macw和他最好的朋友Vincent一起来到了天目山观看天目山的风景。可谁又曾想,天目山的山路蜿蜒崎岖,车子没开一会儿就快没油了。于是,Macw拿出他的手机查看了附近的几所加油站,每所加油站都标注了这所加油站的离Macw和Vincnet的距离。
Macw想知道,有多少所加油站他们可以在汽车耗尽所有油之前到达、以及离Macw最近的加油站是哪一所加油站。
2023-08-04 来自 浙江
0
有帮助,赞一个