题解 P2433 【【深基1-2】小学数学 N 合一】

· · 题解

我真的被这题的毒性惊到了。

不多说了,咱来一个一个问看这道题。

问题 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,求它的斜边长度。

所以得到斜边 c=\sqrt{6^2+9^2}

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

r 为半径,那么圆的周长 C=2 \pi r,面积 S= \pi r^2,球的体积 V=\frac{4}{3} \pi r^3

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

是个牛吃草问题,或称牛顿问题,但我太蒻忘了这种题型的小学奥数解法,所以干脆列方程。

设原有 a 个评测任务,而每分钟增加 x 个评测任务,那么根据每台评测机每分钟处理的评测任务数量相同,可以得到

\dfrac{a+30x}{30 \times 8}=\dfrac{a+6x}{6 \times 10}

这么一个方程,解之得 x=\frac{1}{2}a

那么每台评测机每分钟可以处理 \frac{1}{15}a 个评测任务,而现在有 a+10x=6a 个评测任务,相除得到需要 9 台评测机。

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

这涉及到了我的知识盲区……

再一次粗暴地列了方程:

设课程定价需降低 x 元,可得到

(110-x)(10+x)=3500

这样一个方程。题目说有两个答案的原因在于这是个一元二次方程。直接暴力破解,得到它的两个根:x=40x=60

因为题目让我们求课程定价的最小值,而我们设的是降低的钱,那自然降得越多越好,答案应该是 110-60=50 元。

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 个问题的程序,所以代码会有点长。你也可以选择提交答案式的输出,那样看起来更清爽些。

(突然想求个三连是怎么回事)