解题思路:
本题我们可以使用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分
3 人评分
C语言训练-排序问题<2> (C++代码)浏览:936 |
不容易系列 (C语言代码)浏览:702 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:644 |
C语言训练-列出最简真分数序列* (C语言代码)浏览:658 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:863 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:593 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:761 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:574 |
K-进制数 (C语言描述,蓝桥杯)浏览:955 |
杨辉三角 (C语言代码)浏览:505 |