计算邮资

GitHub跳转原题关系图返回列表

基础邮资加超重部分的向上取整计费,再判断是否加急。

OJ: noi_openjudge

题目 ID: ch0104-14

难度:入门

标签:数学条件判断python

日期: 2026-07-30 23:01

题意

1000 克以内收费 8 元;超出部分每 500 克或不足 500 克收费 4 元;加急另加 5 元。

思路

先初始化基础费。超重 extra 的计费段数是正整数向上除法 (extra + 499) // 500,再乘 4。最后独立判断加急字符是否为 y

代码

Python代码

python
weight_text, express = input().split()
weight = int(weight_text)

fee = 8
if weight > 1000:
    fee += (weight - 1000 + 499) // 500 * 4
if express == "y":
    fee += 5

print(fee)

C++代码

cpp
#include <cstdio>

int  main(){
	int w,y;
	scanf("%d",&w);
	scanf("%c",&y);
	scanf("%c",&y);
	int h = 8;
	if( w - 1000 > 0){
		int c = w - 1000;
		h = h + (c / 500) * 4;
		if( c % 500 != 0){
			h = h +4;
		}
	}
	if( y == 'y')
		h = h + 5;
	printf("%d",h);
	return 0;
}

复杂度

时间复杂度和额外空间复杂度均为 O(1)O(1)

总结

不足一个计费单位也收费时,要用向上取整而不是普通整除。