题目:
企业发放的奖金根据利润提成。利润低于或等于100000元的,奖金可提10%;
利润高于100000元,低于200000元(100000<L≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成
7.5%; 200000<L≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成; 400000<L≤600000元时,高于400000元的部分按3%提成;600000<L≤1000000时,高于600000元的部分按1.5%提成; L>1000000时,超过1000000元的部分按1%提成。
从键盘输入当月利润L,求应发奖金总数。
输入:
(一个整数)当月利润
输出:
(一个整数)奖金
代码如下:
#include<stdio.h>
int main()
{
int i,k,j;
scanf("%d",&k);
i=k/100000;
if(i<10)
{
switch(i)
{
case 0:
j=k*0.1;break;
case 1:
j=100000*0.1+(k-100000)*0.75;break;
case 2:
case 3:
j=100000*0.1+100000*0.75+(k-200000)*0.05;break;
case 4:
case 5:
j=100000*0.1+100000*0.75+200000*0.05+(k-400000)*0.03;break;
case 6:
case 7:
case 8:
case 9:
j=100000*0.1+100000*0.75+200000*0.05+200000*0.03+(k-600000)*0.015;break;
}
}
else if(i>=10)
{
j=100000*0.1+100000*0.75+200000*0.05+200000*0.03+400000*0.015+(k-1000000)*0.01;
}
printf("%d",j);
}
注意:
- 将很大的数先做除法,变成可用于选择的整数;
- break不能掉;
- 数字很大容易漏写0,每一层利润数对应的百分比要仔细看;
基于上面的第三点,我们可以在开头定义一个字符,用来表示100000,在计算时直接乘上几倍,就能减少出错。
优化后的代码如下:
#include<stdio.h>
#define Q 100000
int main()
{
int i,k,j;
scanf("%d",&k);
i=k/Q;
if(i<10)
{
switch(i)
{
case 0:
j=k*0.1;break;
case 1:
j=Q*0.1+(k-Q)*0.75;break;
case 2:
case 3:
j=Q*0.1+Q*0.75+(k-2*Q)*0.05;break;
case 4:
case 5:
j=Q*0.1+Q*0.75+2*Q*0.05+(k-4*Q)*0.03;break;
case 6:
case 7:
case 8:
case 9:
j=Q*0.1+Q*0.75+2*Q*0.05+2*Q*0.03+(k-6*Q)*0.015;break;
}
}
else if(i>=10)
{
j=Q*0.1+Q*0.75+2*Q*0.05+2*Q*0.03+4*Q*0.015+(k-10*Q)*0.01;
}
printf("%d",j);
}
版权声明:本文为m0_46735251原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。