题解 P1421 【小玉买文具】

· · 题解

【C++题解】

难度:初学者范围

需要掌握知识点:C++的输入输出,浮点数的运用,浮点数和整数的强转

思路:这道题还是蛮简单的,洛谷放在新手村也不足为奇。具体来说C++只需要用float做除法运算后直接强制转换为int即可。它会帮你去尾,不是四舍五入呦!

#include<iostream>
using namespace std;
int main()
{
    //题目核心:一支笔1元9角,给了a元b角,求最多买几只
    float penPrice=1.9;//转换为1.9元
    int a,b=0;
    cin>>a>>b;
    float nowHave=a+(b*0.1);//转换为a.b元
    cout<<(int)(nowHave/penPrice)<<endl;//除法运算输出
    return 0;
}

提交次数:2次

易错点记录:(本人第一次栽在了这个地方)强转的时候一定要注意运算顺序,之前我写的强转输出是这样的:

cout<<(int)nowHave/penPrice<<endl;

可以对比一下

cout<<(int)nowHave/penPrice<<endl;//第一次,五个测试点全部爆WA
cout<<(int)(nowHave/penPrice)<<endl;//第二次,100分AC通过

直接就能看出来,第一次我没有在nowHave/penPrice上打括号,给大家写一个伪代码理解一下:

第一行:

输出:现在有的钱取整后除以一支笔的价格

第二行:

输出:现在有的钱除以一支笔的价格后取整

所以,第一行得到的结果是错误的。

所以,一定要注意运算顺序!

后记:当然,有些OIer可能会说我不专业:你这个前面加上using namespace std还不如直接用std::好呢,这个只是个人习惯而已,新手怎么用都行,当然大犇们可能用的都是std::,毕竟多个namespace 放一块容易乱,那是后期的事情了,前期先这么写着也是可以的。毕竟只有一个namespace。

我是程序员果果,也不是第一天加入洛谷了,这是重开的一个号,我会在这个号里做详细的练习和题解,尽请期待哦。