解题思路:
本题我们可以使用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%;

首先,我们一开始需要处理的是(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分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复