【day9】【洛谷算法题】-P2433小学数学N合一-刷题反思集[入门2分支结构]
🌸大家好,我是花无缺,一枚热爱生活的新时代青年,感谢你的阅读🥰~
👨💻个人主页:@花无缺
欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
本文由 花无缺 原创收录于专栏 【算法题集】
文章目录
- 🌞【深基1-2】小学数学 N 合一
- 🌸题目描述
- 🍭问题1
- 🍭问题2
- 🍭问题3
- 🍭问题4
- 🍭问题5
- 🍭问题6
- 🍭问题7
- 🍭问题8
- 🍭问题9
- 🍭问题10
- 🍭问题11
- 🍭问题12
- 🍭问题13
- 🍭问题14
- 🌸输入格式
- 🌸输出格式
- 🌸样例
- 🍭样例输入
- 🍭样例输出
- 🌸提示
- 🌸我的题解
- 🍭结果
- 🌸优解
- 🌸反思总结
- #1
- #2
- #3
- #4
- #5
- #6
- #7
- #8
- #9
- #10
- #11
- #12
- #13
- #14
🌞【深基1-2】小学数学 N 合一
🌸题目描述
🍭问题1
请输出I love Luogu!
🍭问题2
这里有 10 10 10 个苹果,小 A 拿走了 2 2 2 个,Uim 拿走了 4 4 4 个,八尾勇拿走剩下的所有的苹果。我们想知道:
- 小A 和 Uim 两个人一共拿走多少苹果?
- 八尾勇能拿走多少苹果?
现在需要编写一个程序,输出两个数字作为答案,中间使用空格分开。
🍭问题3
现在有 14 14 14 个苹果。要均分给 4 4 4 名同学,分不掉的苹果放回冰箱。请问:
- 每位同学能分得几个苹果?
- 一共分出去多少苹果?
- 把几个苹果放回冰箱?
现在需要编写一个程序,输出三个数字作为答案,每个数字一行。
🍭问题4
现在有 500 500 500 毫升的肥宅快乐水,要均分给 3 3 3 名同学,每位同学可以分到多少毫升?请输出一个数字作为输出。保留 6 6 6 位有效数字,且不使用科学计数法。
🍭问题5
甲列火车长 260 260 260 米,每秒行 12 12 12 米;乙列火车长 220 220 220 米,每秒行 20 20 20 米,两车相向而行,从两车车头相遇时开始计时,多长时间后两车车尾相离?已知答案是整数。
🍭问题6
一个长方形长宽分别是
6
cm
6 \text{ cm}
6 cm、
9
cm
9 \text{ cm}
9 cm,求它的对角线长度(
cm
\text{cm}
cm)。直接使用 cout
输出。
🍭问题7
Uim 银行账户里面有 100 100 100 元。经过了下面的操作:
- 往里面存了 10 10 10 元;
- 购物花掉了 20 20 20 元;
- 把里面的钱全部取出。
请在每次操作后输出账户余额,并使用换行符隔开。
🍭问题8
当半径为
r
=
5
r=5
r=5,请输出圆的周长、面积和球体积。取
π
=
3.141593
\pi=3.141593
π=3.141593。请直接使用 cout
输出答案,每行一个数字。
🍭问题9
一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;第二天他也刚好吃了剩余桃子的一半,贪嘴多吃了一个;第三天他又刚好吃了剩下的桃子的一半,并贪嘴多吃了一个。第四天起来一看,发现桃子只剩下一个了。请问小猴买了几个桃子?
🍭问题10
洛谷的评测任务是单位时间内均匀增加的。 8 8 8 台评测机 30 30 30 分钟可以刚好把评测队列中的程序评测完毕, 10 10 10 台评测机 6 6 6 分钟可以刚好把评测队列中的程序评测完毕,请问几台评测机可以在 10 10 10 分钟时刚好把评测队列中的程序评测完毕?
🍭问题11
小 A 跑步速度 5 m/s 5 \text{ m/s} 5 m/s,八尾勇跑步速度 8 m/s 8 \text{ m/s} 8 m/s,八尾勇在小 A 后面 100 m 100 \text{ m} 100 m,他们同时起跑,请问需要多长时间八尾勇可以追上小 A?输出一个数字表示答案,使用 cout 直接输出。
🍭问题12
大家都知道有 26 26 26 个英文字母,其中 A 是第一个字母。现在请编程求出:
- M 是字母表中的第几个字母?
- 第 18 18 18 个字母是什么?
输出一个数字和一个字母,使用换行隔开。
🍭问题13
小 A 有两块球形橡皮泥,一个半径是 4 4 4,一个半径是 10 10 10。他想把这两块橡皮泥揉在一起,然后塑造成一个正方体,请问这个正方体的棱长是多少?如果结果不是整数,则舍去小数点之后的数字。取 π = 3.141593 \pi = 3.141593 π=3.141593。
🍭问题14
根据咕咕网校的预测,当课程定价为 110 110 110 元时,会有 10 10 10 人报名。如果课程价格每降低 1 1 1 元,就会多 1 1 1 名报名者(反之亦然)。如果希望总共能收到 3500 3500 3500 元学费的话,那么应该定价多少呢?已知本题有两个答案符合要求,则取较小的那一个。如果这个答案不是整数,则需四舍五入精确到整数。
🌸输入格式
输入一个正整数,表示第几个问题。
🌸输出格式
根据所输入的问题编号,输出对应问题的答案。
🌸样例
🍭样例输入
2
🍭样例输出
6 4
🌸提示
请解决以下小学数学题。你可以提交答案,也可以写一个程序。
对于本题来说,如果你不知道怎么输入,也可以这么抄:
#include<iostream>
// 填上你觉得需要的其他头文件
using namespace std;
int main() {
int T;
cin >> T;
if (T == 1) {
// 粘贴问题 1 的主函数代码,除了 return 0
cout << "I love Luogu!";
} else if (T == 2) {
// 粘贴问题 2 的主函数代码,除了 return 0
cout << 2 + 4 << " " << 10 - 2 - 4;
} else if (T == 3) {
// 请自行完成问题 3 的代码
} else if (T == 4) {
// 请自行完成问题 4 的代码
} else if (T == 5) {
// 请自行完成问题 5 的代码
} else if (T == 6) {
// 请自行完成问题 6 的代码
} else if (T == 7) {
// 请自行完成问题 7 的代码
} else if (T == 8) {
// 请自行完成问题 8 的代码
} else if (T == 9) {
// 请自行完成问题 9 的代码
} else if (T == 10) {
// 请自行完成问题 10 的代码
} else if (T == 11) {
// 请自行完成问题 11 的代码
} else if (T == 12) {
// 请自行完成问题 12 的代码
} else if (T == 13) {
// 请自行完成问题 13 的代码
} else if (T == 14) {
// 请自行完成问题 14 的代码
}
return 0;
}
🌸我的题解
#include <iostream>
using namespace std;
#include <math.h>
int main()
{
int t;
float PI = 3.141593;
scanf("%d", &t);
switch (t)
{
case 1:
printf("I love Luogu!");
break;
case 2:
printf("%d %d", 2 + 4, 10 - 2 - 4);
break;
case 3:
printf("%d\n%d\n%d", 14 / 4, 14 / 4 * 4, 14 % 4);
break;
case 4:
printf("%.3f", 500 / 3.0);
break;
case 5:
printf("%d", 480 / 32);
break;
case 6:
cout << sqrt(6 * 6 + 9 * 9);
break;
case 7:
printf("%d\n%d\n%d\n", 100 + 10, 100 + 10 - 20, 0);
break;
case 8:
{
float radius = 5.0;
cout << 2 * radius * PI << endl
<< PI * radius * radius << endl
<< (4.0 / 3) * PI * radius * radius * radius;
}
break;
case 9:
{
int count = 3, sum = 0;
for (int i = 0; i < count; i++)
{
}
}
break;
case 10:
printf("%d", 9);
break;
case 11:
cout << 100 / 3.0;
break;
case 12:
printf("%d\n%c", 'M' - 64, 'A' + 17);
break;
case 13:
{
float radius1 = 4;
float radius2 = 10;
double num = (4.0 / 3) * PI * radius1 * radius1 * radius1 + (4.0 / 3) * PI * radius2 * radius2 * radius2;
printf("%.0lf\n", cbrt(num));
}
break;
case 14:
{
}
break;
default:
printf("您的输入有误,请输入1-14(包含1和14)之间的整数题号!");
break;
}
return 0;
}
🍭结果
Unaccepted
这个题属实有点小难,第9和第14没有写出来
🌸优解
#include <iostream>
using namespace std;
#include <math.h>
int main()
{
int t;
float PI = 3.141593;
scanf("%d", &t);
switch (t)
{
case 1:
printf("I love Luogu!");
break;
case 2:
printf("%d %d", 2 + 4, 10 - 2 - 4);
break;
case 3:
printf("%d\n%d\n%d", 14 / 4, 14 / 4 * 4, 14 % 4);
break;
case 4:
printf("%.3f", 500 / 3.0);
break;
case 5:
printf("%d", 480 / 32);
break;
case 6:
cout << sqrt(6 * 6 + 9 * 9);
break;
case 7:
printf("%d\n%d\n%d\n", 100 + 10, 100 + 10 - 20, 0);
break;
case 8:
{
float radius = 5.0;
cout << 2 * radius * PI << endl
<< PI * radius * radius << endl
<< (4.0 / 3) * PI * radius * radius * radius;
}
break;
case 9:
cout << (((((1 + 1) * 2) + 1) * 2) + 1) * 2;
break;
case 10:
printf("%d", 9);
break;
case 11:
cout << 100 / 3.0;
break;
case 12:
printf("%d\n%c", 'M' - 64, 'A' + 17);
break;
case 13:
{
float radius1 = 4;
float radius2 = 10;
double num = (4.0 / 3) * PI * radius1 * radius1 * radius1 + (4.0 / 3) * PI * radius2 * radius2 * radius2;
printf("%.0lf\n", cbrt(num));
}
break;
case 14:
cout << 50;
break;
default:
printf("您的输入有误,请输入1-14(包含1和14)之间的整数题号!");
break;
}
return 0;
}
🌸反思总结
刚看到这个题的时候人都傻了,一上来就搞这大动作,题这么多。
从这个题开始便是【入门2】[分支结构]的题了,今天这个题是题单里的第一个题。总共有14个问题,根据输入的题号,输出对应题目的答案,这里可以使用题目提供的if else
多个选择结构来做,但是我使用了我认为更为简单的switch
多分支选择结构来做。
每个题的详解:
#1
一个简单的输出语句:
//C语言风格
printf("I love Luogu!");
//C++风格
cout <<"I love Luogu!";
#2
一个简单的数学问题
printf("%d %d", 2 + 4, 10 - 2 - 4);
#3
简单的数学问题:
printf("%d\n%d\n%d", 14 / 4, 14 / 4 * 4, 14 % 4);
#4
简单的数学问题:
printf("%.3f", 500 / 3.0);
这个题有一个易错点,保留6位有效数字,不要误认为保留六位有效数字就是保留六位小数。有效数字
是指从第一个不为0的数字开始后的数字,而且不算上末尾的0。
例如:
1.345
4位有效数字
0.04
1位有效数字
0.00453
3位有效数字
0.783000
3位有效数字
#5
一个数学行程的问题。此题是一个相遇问题,解题关键点:时间相同,且相遇时和离开时的总距离都是相同的。
直接上公式:
相遇问题:路程和 = 时间 * 速度和
cout<<(220+260)/(20+12);
#6
这个就是利用三角形勾股定理来做。利用C语言函数库中的平方根函数sqrt()
cout<<sqrt(6*6+9*9);
#7
简单的数学题。
printf("%d\n%d\n%d\n", 100 + 10, 100 + 10 - 20, 0);
#8
直接用公式
圆的周长:C=2πr
圆的面积:S=πr2
球的体积:V=(4/3)πr3
{
float radius = 5.0;
cout << 2 * radius * PI << endl
<< PI * radius * radius << endl
<< (4.0 / 3) * PI * radius * radius * radius;
}
在做这个题的时候,发现了一个有意思的报错,就是我刚开始没有把这个分支语句下的代码加上花括号,然后就报错了,报错内容是: "jump to case label [-fpermissive]"
如图:
查阅资料后发现, 因为switch中没有单独的区域块来限定变量的声明周期,所以变量的作用域是初始化点到switch的结尾处 。
所以C语言里,如果要在swicth语句的case语句下定义变量,则要定义在一个花括号里,将变量的作用范围限定在当前的case语句中,不然会报错,或者将变量定义在switch结构之外。
相关链接
#9
这个题有解题的思路,但当时不能用代码描述出来。
采用倒推的方法,从最后一天开始往前推算。
cout << (((((1 + 1) * 2) + 1) * 2) + 1) * 2;
#10
这个题有个漏洞,就是所求的数量是在8到10之间的,而又只能是整数,所以只能是9;这样就做出来了。
但是还是要看看正确的做法。这是一个牛吃草问题,那么什么是牛吃草问题呢。
例如这样的问题: 牧场上有一片青草,每天都生长得一样快。这片青草供给10头牛吃,可以吃22天,或者供给16头牛吃,可以吃10天,期间一直有草生长。如果供给25头牛吃,可以吃多少天?
这个题就和本题非常的相似,草每天都在增长,此题中评测速率也在增快
可以列出一个方程组:
x+30y=8×30;
x+6y=10×6;
其中,x是初始的评测时间,y是每分钟的增长量
解得 x = 5; y = 7.5;
则答案等于:(15+7.5×10) ÷ 10= 9 台评测机器。
#11
一个简单的追及问题。八尾勇追上小A的总路程 = 小A的路程加上100米
得方程:5t + 100 = 8t
cout << 100 / 3.0;
#12
利用ASCII码来解答,A的ASCII码为65,根据这个推算就可以得出结果。
printf("%d\n%c", 'M' - 64, 'A' + 17);
ASCII码的相关介绍可以看这篇文章:链接
#13
先算出两个橡皮泥的总体积,再开立方根求出正方体的棱长
float radius1 = 4;
float radius2 = 10;
double num = (4.0 / 3) * PI * radius1 * radius1 * radius1 + (4.0 / 3) * PI * radius2 * radius2 * radius2;
printf("%.0lf\n", cbrt(num));
其中,cbrt()
是C语言中的开立方根函数
#14
这个题当时想复杂了,没有思路。
用一个一元二次方程组就搞定了
设降价x元,售价就为110 + x元
得方程:
(110+x)(10−x)=3500;
解出来得:x1 = 70;x2 = 50;
题目要求要小的那个。
所以输出50就OK了。
今天完成了[入门2分支结构]的第一题,继续加油吧
🌸欢迎
关注
我的博客:来和我一起成长吧! 现在关注我,以后就是老粉了(手动狗头)
🍻一起进步-刷题专栏:【算法题集】
🥇往期精彩好文:
📢【day8】【洛谷算法题】-P3954成绩-刷题反思集[入门1顺序结构][附一周思考总结]
📢HTML基础知识详解
你们的点赞👍 收藏⭐ 留言📝 关注✅
是我持续创作,输出优质内容
的最大动力!
谢谢!