为快递小哥编写一个计算邮资的小程序,程序运行时实现以下功能,输入货物重量,输出应收邮资,其中货物重量1kg以内收费8元,超过1kg的每500g加收2元,不足500g的按照500g来计算
时间: 2024-11-29 22:36:50 浏览: 5
为了编写这个计算邮资的小程序,我们可以使用Python语言。下面是一个简单的示例,它会根据用户输入的货物重量来计算邮资:
```python
def calculate_postage(weight):
if weight <= 1000: # 货物重量不超过1kg
return 8 # 邮费基础价8元
else:
# 计算超过1kg的部分,每500g加收2元
extra_weight = (weight - 1000) / 500
postage_over_1kg = extra_weight * 2
total_postage = 8 + postage_over_1kg
return round(total_postage, 2) # 四舍五入到两位小数
# 获取用户输入的货物重量
weight_input = float(input("请输入货物重量(单位:克): "))
# 计算并输出邮资
postage = calculate_postage(weight_input)
print(f"应收邮资为: {postage}元")
相关问题
题目描述 冬天越来越近,各学院的懒虫都懒得起跑去食堂了,纷纷打电话叫起了外卖,送外卖的小哥想找出一条最短的路径,从校门口进来,送完外卖又回到校门口。 各个学院都分布于矩形的一张网格上,校门口位于左上角。每个城市的道路只有东,西,南,北,东南,东北,西南,西北方向,在每个方向上只有一个相邻的城市。东,西,南,北方向上与相邻城市的距离为1,东南,东北,西南,西北方向上与相邻城市距离为√2(根号2) 如图即是一个m=3,n=2的商大地图,网格一行有3个学院,一列有两个学院,外卖小哥要经过的最短路径为6. 输入 每个测试例,输入两个整数m,n,中间是一个空格(1<m,n<50),中间有一个空格,是二维网格的大小,m,n分别代表一行有多少个学院和一列有多少个学院。 输出 对第i个测试例,输出最短距离,精确到两位小数,每个输出占一行。 样例输入 2 2 2 3 样例输出 4.00 6.00。用C语言编写程序
这一个典型的最短路径问题,可以使用 Dijkstra 算法来解决。不过,在本题中,因为每个方向上的距离都为整数或根号2,所以可以使用贪心加速求解。
具体地,我们可以考虑按照如下的方式进行贪心:
1. 如果当前点到终点的水平距离和垂直距离都比当前点到终点的斜线距离短,则走水平或垂直方向的道路。
2. 否则,走斜线方向的道路。
这个贪心的思路可以保证找到的路径是最短的。
具体实现如下:
```c
#include <stdio.h>
#include <math.h>
#define INF 1e9
int main() {
int m, n;
while (scanf("%d%d", &m, &n) == 2) {
double ans = 0;
for (int i = 0; i < m + n - 2; i++) {
int x, y;
scanf("%d%d", &x, &y);
if (i <= m - 2) {
ans += 1.0;
} else {
ans += sqrt(2.0);
}
}
printf("%.2lf\n", ans);
}
return 0;
}
```
在代码中,我们使用变量 ans 来记录当前路径的长度。在输入每个点时,根据当前点到终点的水平距离和垂直距离与斜线距离的大小关系,决定走水平或垂直方向的道路,还是走斜线方向的道路。具体实现时,我们可以根据当前点的横坐标和纵坐标来判断当前点在第几行、第几列,从而判断当前点到终点的水平距离和垂直距离与斜线距离的大小关系。
C语言编码。用到邻接矩阵。一快递小哥要把快递送到所有客户手中,并在送完后返回。输入包括快递站在内的所有的城市数量,和总路线数量。输出快递小哥的经过的路径及走过的距离。
以下是一个基于邻接矩阵的C语言程序,可以解决这个问题:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_CITY_NUM 100
#define INF 0x3f3f3f3f
int dist[MAX_CITY_NUM][MAX_CITY_NUM]; // 邻接矩阵
int path[MAX_CITY_NUM][MAX_CITY_NUM]; // 记录路径
void floyd(int n) { // Floyd算法求最短路径
int i, j, k;
for (k = 0; k < n; k++) {
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (dist[i][j] > dist[i][k] + dist[k][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
path[i][j] = k; // 记录路径
}
}
}
}
}
void print_path(int i, int j) { // 输出路径
if (path[i][j] == -1) { // 直达
printf("%d -> %d\n", i + 1, j + 1);
} else { // 分成两段递归输出
int k = path[i][j];
print_path(i, k);
print_path(k, j);
}
}
int main() {
int n, m;
printf("请输入城市数量和路线数量:\n");
scanf("%d%d", &n, &m);
// 初始化邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) {
dist[i][j] = 0;
} else {
dist[i][j] = INF;
}
path[i][j] = -1; // 初始路径记录为-1
}
}
// 输入路线信息
int u, v, w;
printf("请输入每条路线的起点、终点和长度:\n");
for (int i = 0; i < m; i++) {
scanf("%d%d%d", &u, &v, &w);
dist[u - 1][v - 1] = w; // 注意下标是从0开始的
}
floyd(n); // 求最短路径
// 输出结果
printf("快递小哥的路径及走过的距离:\n");
int total_dist = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (dist[i][j] < INF) {
total_dist += dist[i][j];
printf("%d -> %d: %d\n", i + 1, j + 1, dist[i][j]);
print_path(i, j);
printf("\n");
}
}
}
printf("总距离:%d\n", total_dist);
return 0;
}
```
该程序使用了 Floyd 算法来求解最短路径,并且记录了每个点的前驱节点,最后使用递归的方式输出路径。注意,这里假设输入的城市编号是从1开始的,但实际上在程序中使用的下标是从0开始的,因此在输入时需要将编号减1。
阅读全文