渴望学到知识的菜鸟


私信TA

用户名:ldhskd

访问量:33215

签 名:

这小伙子人行,能处!

等  级
排  名 112
经  验 8007
参赛次数 1
文章发表 48
年  龄 18
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

    本题我们可以使用switch来做,这样子做出来更简洁。

    不过在这之前,我们要先知道,switch-case结构其实只会判断一次


    例如:

int a = 0;
switch(5)
{
    case 5:
        a++;
    case 4:
        a++;
    default:
        a++;
}
//这段代码执行完,a的结果是3,而不是1,因为只比较一次,与case 5 匹配成功后,执行case 5里面的代码

//执行完case 5里面的代码后,由于没有break,不会跳出switch-case结构,会继续执行下去,直到遇到break退出

//而这里恰巧没有一个break,所以,会把case 4 和 default 里面的代码都执行完



题目:

    

    企业发放的奖金根据利润提成。利润低于或等于100000元的,奖金可提10%;


    利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成 7.5%;


    200000<I≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成;


    400000<I≤600000元时,高于400000元的部分按3%提成;


    600000<I≤1000000时,高于600000元的部分按1.5%提成;


    I>1000000时,超过1000000元的部分按1%提成。


    


如果按着题目正着分析,我们可能不便于处理代码,不如将题目倒过来



    I>1000000时,超过1000000元的部分按1%提成。

    

    600000<I≤1000000时,高于600000元的部分按1.5%提成;


    400000<I≤600000元时,高于400000元的部分按3%提成;


    200000<I≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成;


    利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成 7.5%;


    利润低于或等于100000元的,奖金可提10%;


    `X5KF8YF}~~IUGW@R8TY6UX.png


    首先,我们一开始需要处理的是(1000000,无穷),这个范围不易表达,所以,我们只能用default来代替这个范围

    然后

        number -= 1000000;
        profit += number * 0.01;
        number = 1000000;

    一开始先减少1000000,就是为了先找出超过了1000000的数,然后让总利润加上这个数乘以对应的利率

    而第三行代码 number = 1000000 , 是因为我们已经算了超过1000000的利润了,接下来要算这1000000的利润了。


    case 9:
    case 8:
    case 7:
    case 6:
        number -= 600000;
        profit += number * 0.015;
        number = 600000;

    之所以是case 9、8、7、6是因为在switch判断条件里写的是number / 100000 ,这样子对后续的操作更方便一些,不用担心漏写0或多写0

    由于600000-1000000的范围对应的利率都是一样的,所以我们可以把这些情况都写在一起,并用一串代码。

    然后number -= 600000;     profit += number * 0.015;  这两句是为了算出超过600000的金额的利润,然后累加到总利润里去

    number = 600000; 是为了接着后续的内容,也就是接着算后面的利润



    之内的内容都和上述类似,就不再赘述



参考代码:

// C语言代码
#includeint main()
{
    long long int number,profit = 0;
    scanf("%lld",&number);

    switch(number / 100000)
    {
    default:
        number -= 1000000;
        profit += number * 0.01;
        number = 1000000;
    case 9:
    case 8:
    case 7:
    case 6:
        number -= 600000;
        profit += number * 0.015;
        number = 600000;
    case 5:
    case 4:
        number -= 400000;
        profit += number * 0.03;
        number = 400000;
    case 3:
    case 2:
        number -= 200000;
        profit += number * 0.05;
        number = 200000;
    case 1:
        number -= 100000;
        profit += number * 0.075;
        number = 100000;
    case 0:
        profit += number * 0.1;
    }
    printf("%lld\n",profit);
    return 0;
}


//C++代码
#include using namespace std;

int main()
{
    long long int number,profit = 0;
    cin >> number;

    switch(number / 100000)
    {
    default:
        number -= 1000000;
        profit += number * 0.01;
        number = 1000000;
    case 9:
    case 8:
    case 7:
    case 6:
        number -= 600000;
        profit += number * 0.015;
        number = 600000;
    case 5:
    case 4:
        number -= 400000;
        profit += number * 0.03;
        number = 400000;
    case 3:
    case 2:
        number -= 200000;
        profit += number * 0.05;
        number = 200000;
    case 1:
        number -= 100000;
        profit += number * 0.075;
        number = 100000;
    case 0:
        profit += number * 0.1;
    }
    cout<<profit<<endl;
    return 0;
}


 

0.0分

3 人评分

  评论区

666
2021-11-15 16:11:44
  • «
  • 1
  • »