龙芯答案c语言,《C语言经典算法 100 例》习题探讨

/*

Name: C语言经典算法100例002

Copyright: **

Author: 巧若拙

Date: 24-08-14 14:52

Description:

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高

于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提

成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于

40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于

100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

*/

/*算法分析:

分别把利润节点和对应提成比率存储到2个数组中,本题目中共有6个利润节点(其中利润为0算作第一个节点),

profit[i]~profit[i+1]阶段的提成率为reward[i]。

fun1()从最大的利润节点开始遍历整个数组,找到“有效”的利润节点,先算出超出该节点部分的奖金,再计算该利润节点对应的奖金。

把所有奖金累积起来。

fun2()反其道而行,先计算利润节点之内的奖金,再加上超出部分奖金。相对来说fun2()较好理解,用时较短。

*/

#include

#include

#include

#define MAX 6

void fun1(void);

void fun2(void);

int main(void)

{

fun1();

fun2();

system("pause");

return 0;

}

void fun1(void)

{

float profit[MAX]={0, 10, 20, 40, 60, 100};

float reward[MAX]={0.1, 0.075, 0.05, 0.03, 0.015, 0.01};

float pro = 0, rew = 0;

int i;

puts("请输入当月利润:");

scanf("%f", &pro); printf("\nlirun: %f\n", pro);

for (i=MAX-1; i>=0; i--)

{

if (pro > profit[i]) //寻找“有效”的利润节点,即利润必须大于该利润节点

{

rew += (pro - profit[i]) * reward[i]; //先计算超出部分奖金

pro = profit[i]; //再计算剩余部分奖金,恰好等于某个利润节点

}

}

printf("\n提成为: %f\n", rew);

}

void fun2(void)

{

float profit[MAX]={0, 10, 20, 40, 60, 100};

float reward[MAX]={0.1, 0.075, 0.05, 0.03, 0.015, 0.01};

float pro = 0, rew = 0;

int i = 0;

puts("请输入当月利润:");

scanf("%f", &pro); printf("\nlirun: %f\n", pro);

while ((i < MAX-1) &&  pro > profit[i+1])//先计算利润节点之内的奖金

{

rew += (profit[i+1] - profit[i]) * reward[i];

i++;

}

rew += (pro - profit[i]) * reward[i]; //再加上超出部分奖金

printf("\n提成为: %f\n", rew);

}

-----------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值