题解 P2433 【【深基1-2】小学数学 N 合一】
Yusani_huh · · 题解
我真的被这题的毒性惊到了。
不多说了,咱来一个一个问看这道题。
问题 1
按照题意直接输出即可。
cout<<"I love Luogu!"<<endl;
问题 2
简单的加减法即可解决。
cout<<2+4<<" "<<10-2-4<<endl;
问题 3
简单的乘除法即可解决。
因为整数除法向下取整的特性,我们可以直接用 14/4 完成第一个问。
int a=14/4;
cout<<a<<endl;
cout<<a*4<<endl;
cout<<14-a*4<<endl;
问题 4
用浮点除法直接除即可。
cout<<500.0/3<<endl;
问题 5
当成一个相遇问题来做,即两列火车从车头相遇时开始计时,然后让车尾相遇的过程,路程则是两列车的车身长度之和。
cout<<(260+220)/(12+20)<<endl;
问题 6
这题使用勾股定理,即转化为一个直角三角形的两条直角边分别为 6cm、9cm,求它的斜边长度。
所以得到斜边
double a=6,b=9;
double c=sqrt(a*a+b*b);
cout<<c<<endl;
问题 7
按照题意模拟即可。
int a=100;
a+=10; //存了10元
cout<<a<<endl;
a-=20; //花了20元
cout<<a<<endl;
a=0; //全部取出
cout<<a<<endl;
问题 8
设
int r=5;
double pi=3.141593;
cout<<2*pi*r<<endl;
cout<<r*r*pi<<endl;
cout<<4.0/3*pi*r*r*r<<endl;
问题 9
用倒推法解决,或者直接列方程,列表也行。
代码用的是倒推法,从剩下一个桃子推出第三天没吃之前有多少个,再推出第二天没吃之前有多少个,以此类推。
cout<<(((1+1)*2+1)*2+1)*2<<endl;
问题 10
是个牛吃草问题,或称牛顿问题,但我太蒻忘了这种题型的小学奥数解法,所以干脆列方程。
设原有
这么一个方程,解之得
那么每台评测机每分钟可以处理
cout<<9<<endl;
我看到题解区有巨佬的解法特精彩,果然还是我太蒻。
问题 11
这是个追及问题,直接公式计算就行。注意用浮点除法。
cout<<100.0/(8-5)<<endl;
问题 12
不嫌麻烦的话你可以直接数,我解决这个用的是 ASCII 码。
由于A是从第一个开始记的,所以要根据情况加 1 或减 1。
cout<<'M'-'A'+1<<endl;
cout<<char('A'-1+18)<<endl;
问题 13
球的体积公式刚才提到了,只要把两个球的体积加起来,再开立方根就行,注意舍去小数部分,即向下取整。
int r1=4,r2=10;
double pi=3.141593;
double v=4.0/3*pi*r1*r1*r1+4.0/3*pi*r2*r2*r2;
v=pow(v,1.0/3); //因为C++没有开立方根的函数,求它的三分之一次方可以达到同样的效果。
printf("%.0lf\n",v); //%.0lf可直接舍去小数部分
问题 14
这涉及到了我的知识盲区……
再一次粗暴地列了方程:
设课程定价需降低
这样一个方程。题目说有两个答案的原因在于这是个一元二次方程。直接暴力破解,得到它的两个根:
因为题目让我们求课程定价的最小值,而我们设的是降低的钱,那自然降得越多越好,答案应该是
cout<<50<<endl;
对于答案的输出方式,我们当然不用粗暴的if else句式,而采用switch进行判定。
还是奉上完整代码,这里就不加注释了。
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
switch(n){
case 1:{
cout<<"I love Luogu!"<<endl;
break;
}
case 2:{
cout<<2+4<<" "<<10-2-4<<endl;
break;
}
case 3:{
int a=14/4;
cout<<a<<endl;
cout<<a*4<<endl;
cout<<14-a*4<<endl;
break;
}
case 4:{
cout<<500.0/3<<endl;
break;
}
case 5:{
cout<<(260+220)/(12+20)<<endl;
break;
}
case 6:{
double a=6,b=9;
double c=sqrt(a*a+b*b);
cout<<c<<endl;
break;
}
case 7:{
int a=100;
a+=10;
cout<<a<<endl;
a-=20;
cout<<a<<endl;
a=0;
cout<<a<<endl;
break;
}
case 8:{
int r=5;
double pi=3.141593;
cout<<2*pi*r<<endl;
cout<<r*r*pi<<endl;
cout<<4.0/3*pi*r*r*r<<endl;
break;
}
case 9:{
cout<<(((1+1)*2+1)*2+1)*2<<endl;
break;
}
case 10:{
cout<<9<<endl;
break;
}
case 11:{
cout<<100.0/(8-5)<<endl;
break;
}
case 12:{
cout<<'M'-'A'+1<<endl;
cout<<char('A'-1+18)<<endl;
break;
}
case 13:{
int r1=4,r2=10;
double pi=3.141593;
double v=4.0/3*pi*r1*r1*r1+4.0/3*pi*r2*r2*r2;
v=pow(v,1.0/3);
printf("%.0lf\n",v);
break;
}
case 14:{
cout<<50<<endl;
break;
}
}
return 0;
}
因为完整地敲了其中 12 个问题的程序,所以代码会有点长。你也可以选择提交答案式的输出,那样看起来更清爽些。
(突然想求个三连是怎么回事)