解题思路:
本题我们可以使用switch来做,这样子做出来更简洁。
不过在这之前,我们要先知道,switch-case结构其实只会判断一次
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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来代替这个范围
然后
1 2 3 | number -= 1000000; profit += number * 0.01; number = 1000000; |
一开始先减少1000000,就是为了先找出超过了1000000的数,然后让总利润加上这个数乘以对应的利率
而第三行代码 number = 1000000 , 是因为我们已经算了超过1000000的利润了,接下来要算这1000000的利润了。
1 2 3 4 5 6 7 | 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; 是为了接着后续的内容,也就是接着算后面的利润
之内的内容都和上述类似,就不再赘述
参考代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | // 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; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | //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; } |
4.7 分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复