c语言学习打卡日记 5、枚举超额累进的一些计算

  • Post author:
  • Post category:其他



题目如下:

“双十一”促销活动开始了,某商品规定“满2件打8折、满3件打7折”,但购买数量超出5件(不含)后,超出部分不打折,且单价上浮10%。请编写一段程序,计算各种情况下购买此商品需要支付的总金额。


输入

输入一个浮点数、一个整数,用空格分隔,分别作为商品单价和购物数量。


输出

输出一个浮点数,要求保留2位小数。

#include<stdio.h>
int main()
{float a,c;
int b;
scanf("%f %d",&a,&b);
switch (b){
	case(1):c=a*b;break;
	case(2):c=a*b*0.8;break;
	case(3):c=a*b*0.7;break;
	case(4):c=a*b*0.7;break;
	case(5):c=a*b*0.7;break;
	default:c=(a*5*0.7)+(a*1.1*(b-5)); 
}
printf("%.2f",c);
 } 

笨人在这里用的switch语句其实和if相同(使用方法不详细说了,请看c语言技能树)

但是这样会让代码看得简单一点,在一些具有相似条件下进行简单运算的分支语句里可以尝试使用。

进阶后

某企业需要一个奖金发放计算器,依据利润区间值和该区间的提成率,以及该企业当月实际利润,计算可用于发放的奖金金额。

例如:区间分界值和提成率如下表:

区间分界值

奖金提成率

含义

100,000

10%

当利润低于100,000(含)时,奖金可提10%

200,000

7.5%

高于100,000,低于或等于200,000的部分,按7.5%提成。

400,000

5%

高于200,000,低于或等于400,000的部分按5%提成。

600,000

3%

高于400,000,低于或等于600,000的部分按3%提成

1,000,000

1.5%

高于600,000,低于或等于1,000,000的部分按照1.5%提成

-1

1%

高于1,000,000的部分按照1%提成

使用该计算方法,当用户输入不同的区间分界值、提成率和当月利润,计算并输出应发奖金总数。

【输入格式】

输入n+2行。

第1行包含一个整数n,表示有n行分界值和奖金提成率。

中间n行每行包含1个正整数和1个小数,整数表示区间分界值(并且按从小到大顺序输入),小数表示提成率,两个数字之间用一个空格分隔。注意:第n个区间分界值为-1,表示利润超出上一个区间分界值的其余情况;另外,输入的区间保证是连续、正确的。

第n+2行一个整数,表示当月利润,可正可负,如果利润为负,则输出“NO”。

【输出格式】

1行仅1个数字,表示为当月应发奖金总数,保留小数点后两位数。

如果利润为负,则输出“NO”。

#include <stdio.h>

int main() {
	int n, j, i; //j是比哪几个
	double d;//c是分隔提成档次,d是最终提成
	i = 0; //i是要输入几个a和c
	d = 0;
	scanf("%d", &n);
	int a[105];
	double c[105];
	int b; //n是有几种情况,a是分隔利润档次,b是本月利润
	for (i = 0 ; i < n; i++)
		scanf("%d %lf", &a[i], &c[i]);


	scanf("%d", &b);
	if (b < 0)
		printf("NO\n");
	else {
		for (j = 0; j <= n - 2; j++) {
			if (b > a[j]) {
				if (j == 0 )
					d = d + a[0] * c[0];

				else
					d = d + (a[j] - a[j - 1]) * c[j];
			} else {
				if (j >= 1)
					d = d + (b - a[j - 1]) * c[j];
				else
					d = d + b * c[0];
				break;
			}
		}
		if (b > a[n - 2])
			d += (b - a[n - 2]) * c[n - 1];
		if (n == 1) {
			d += (b ) * c[0];
		}

		printf("%.2lf", d);
	}
	return 0;
}

对,这里也有精度问题,把float换成double就行,注意一下其他地方的类型。

主要就是看逻辑写代码。没有特别的技巧。



版权声明:本文为weixin_74030114原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。