高级蛋白质


私信TA

用户名:uq_47514479274

访问量:2209

签 名:

如果你把所有的错误都关在门外时,真理也将被关在外面了

等  级
排  名 644
经  验 4086
参赛次数 8
文章发表 3
年  龄 16
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

本题共有六种情况,分别是:

  1. 低于等于100000

  2. 高于100000,低于等于200000

  3. 高于200000,低于等于400000

  4. 高于400000,低于等于600000

  5. 高于600000,低于等于1000000

  6. 高于1000000

而本题难点主要在于,每阶段都需要计算

意思就是就算输入400000,也要计算完高于100000,低于200000的利润得出的奖金,然后再加上高于200000,低于等于400000的利润得出的奖金

如果每阶段连着之前的利润一起算的话,容易出错(我觉得qw

而从第二种情况开始,有一部分的奖金是固定的,意思就是你只要达到了这个部分,那么是绝对满足前面一部分的利润的

如高于100000,低于等于200000

高于100000的部分是绝对满足的,而多出来多少我们不知道也不确定

这时候就可以提前计算高于100000部分的奖金,然后后面等多出来部分的奖金计算出来后直接相加即可

我们可以使用#define,将那些每阶段固定的部分提前计算,然后整合即可

我将第二阶段的固定奖金命名为L1

第三阶段为L2

第四阶段为L3

第五阶段为L4

……

这样,只需要用获取到的的利润减去每阶段的定值,然后计算出多出部分的奖金再和之前我们用#define整合的对应阶段的奖金相加即可

注意事项:

先后顺序

每阶段的固定奖金
参考代码:

#include<stdio.h>

#define L1 (100000*0.1)//高于100000,低于等于200000的奖金

#define L2 ((100000*0.1)+(100000*0.075))//高于200000,低于等于400000的奖金

#define L3 ((100000*0.1)+(100000*0.075)+(200000*0.05))//高于400000,低于等于600000的奖金

#define L4 ((100000*0.1)+(100000*0.075)+(200000*0.05)+(200000*0.03))//高于600000,低于等于1000000的奖金

#define L5 ((100000*0.1)+(100000*0.075)+(200000*0.05)+(200000*0.03)+(400000*0.015))//高于1000000的奖金

int main(void)
{
	int i;
	scanf("%d", &i);//获取输入
	if (i <= 100000)
	{
		i = i * 0.1;
	}
	else if (i > 100000 && i <= 200000)
	{
		i -= 100000;//减去该阶段的定值
		i *= 0.075;//计算除定值外多余利润的奖金
		i += L1;//多余利润的奖金加上该阶段的固定奖金
	}
	else if (i > 200000 && i <= 400000)
	{
		i -= 200000;//同上
		i *= 0.05;
		i += L2;
	}
	else if (i > 400000 && i <= 600000)
	{
		i -= 400000;//同上
		i *= 0.03;
		i += L3;
	}
	else if (i > 600000 && i <= 1000000)
	{
		i -= 600000;//同上
		i *= 0.015;
		i += L4;
	}
	else if (i > 1000000)
	{
		i -= 1000000;//同上
		i *= 0.01;
		i += L5;
	}
	printf("%d", i);//输出总奖金
	return 0;
}


 

0.0分

8 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

#include <stdio.h>

int main()
{
    int profit;         // 利润
    int prize = 0;      // 奖金

    const int levels[] = { 1000000, 600000, 400000, 200000, 100000, 0 };
    const float rates[] = { 0.01, 0.015, 0.03, 0.05, 0.075, 0.1 };

    scanf("%d", &profit);

    for (int i = 0; i < 6; i++) {
        if (profit > levels[i]) {
            prize += (profit - levels[i]) * rates[i];
            profit = levels[i];
        }
    }

    printf("%d\n", prize);

    return 0;
}
2023-05-08 22:29:24
#include<stdio.h>
int main(void)
{
	float rate[6]={0.1,0.075,0.05,0.03,0.015,0.01};
	int money=0;
	float bonus=0;
	scanf("%d",&money);
	int amount[5]={100000,200000,400000,600000,1000000,};
	int mon[6]={0};
	int i=0,n=0;
	for( i=0; i<=4; i++ )
	{
		if( (money-amount[i])>=0 )
		{
			mon[i]=amount[i]-amount[i-1];
			n++;
		}else
		{
			mon[n]=money-amount[i-1];
			break;
		}
		if( money>amount[4] )
		{
			mon[5]=money-amount[4];
		 } 
	}
	i=0;
	for( i=0;i<=5;i++ )
	{
		bonus+=(mon[i]*rate[i]);
	}
	printf("\n");
	printf("%.0f\n",bonus);

	return 0;
}
求问大佬,为啥我这样写是错的
2022-04-10 13:28:08
简洁
2022-02-15 14:51:15
  • «
  • 1
  • »