快递费用c++

该博客介绍了如何根据物品重量和目的地区域计算快递费用。对于不超过500克的物品,费用为20元;超出部分根据区域不同,每500克加收4至17元不等。代码实现了一个计算函数,考虑了重量不足500克按500克计费的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述
某快递公司按邮寄物品的重量收费,收费标准如下:
重量在 500 克以内的,一律 20 元;
超过 500 克的,超重的部分按每 500 克加收费用。超出的重量不足 500 克的,按 500 克计算。例如:1020 克,超重 520 克,需加收两份费用。
根据目的地的不同,加收的费用是不一样的。快递公司划分了五个目的地区域:
区域 1:每超重 500 克加收 4 元;
区域 2:每超重 500 克加收 6 元;
区域 3:每超重 500 克加收 9 元;
区域 4:每超重 500 克加收 10 元;
区域 5:每超重 500 克加收 17 元。
给出物品的重量 w 和目的地区域编号,请你计算快递费用。
输入
输入文件名为price.in。
一行,两个正整数w, no。
输出
输出文件名为price.out。
一行,一个整数,表示快递费用。
输入样例 1
1020 3
输出样例 1
38
提示
【样例说明】
1020克的物品寄到区域3,前500克收费20元;
超重1020-500=720克,还需缴纳2份加收的费用;
区域3每超重500克加收9元,共计:20+9*2=38元。

代码

#include<iostream>
using namespace std;
int main()
{
	int n,m,som=0;
	cin>>n>>m;
	if(n<=500){
		som=20;
	}else{
		som=20;
		n=n-500;
		if(n%500==0){
			if(m==1){
				som=som+n/500*4;
			}
			if(m==2){
				som=som+n/500*6;
			}
			if(m==3){
				som=som+n/500*9;
			}
			if(m==4){
				som=som+n/500*10;
			}
			if(m==5){
				som=som+n/500*17;
			}
		}else{
			if(m==1){
				som=som+(n/500+1)*4;
			}
			if(m==2){
				som=som+(n/500+1)*6;
			}
			if(m==3){
				som=som+(n/500+1)*9;
			}
			if(m==4){
				som=som+(n/500+1)*10;
			}
			if(m==5){
				som=som+(n/500+1)*17;
			}
		}
	}
	cout<<som;
	return 0;
}

数学建模的快递问题可以使用C++语言进行编程实现。具体步骤如下: 1. 定义数据结构 首先,需要定义数据结构来存储快递信息,包括快递的起始点、终点、重量费用等信息。可以使用结构体来定义,例如: ``` struct Express { int start; // 起点编号 int end; // 终点编号 int weight; // 重量 int cost; // 费用 }; ``` 2. 读入数据 从文件中读入快递信息,并将其存储到一个数组中。例如: ``` const int MAXN = 100; // 最大快递数量 Express express[MAXN]; // 存储快递信息的数组 int n; // 快递数量 // 读入快递信息 cin >> n; for (int i = 0; i < n; i++) { cin >> express[i].start >> express[i].end >> express[i].weight >> express[i].cost; } ``` 3. 计算最优解 通过数学建模,可以将快递问题转换为图论问题,使用最短路算法求解最优解。例如,可以使用Dijkstra算法来计算从起点到终点的最短路径。具体实现方法可以参考以下代码: ``` const int MAXV = 100; // 最大顶点数 int dist[MAXV]; // 距离数组 bool vis[MAXV]; // 访问标记数组 // Dijkstra算法求最短路 void dijkstra(int s) { memset(dist, 0x3f, sizeof(dist)); // 初始化距离数组 memset(vis, false, sizeof(vis)); // 初始化访问标记数组 dist[s] = 0; // 初始点到自身的距离为0 for (int i = 0; i < n; i++) { int x = -1; for (int j = 0; j < n; j++) { if (!vis[j] && (x == -1 || dist[j] < dist[x])) { x = j; } } vis[x] = true; for (int j = 0; j < n; j++) { if (express[j].start == x && !vis[express[j].end]) { dist[express[j].end] = min(dist[express[j].end], dist[x] + express[j].cost); } } } } ``` 4. 输出结果 最后,输出最优解即可。例如,输出从起点到终点的最短距离: ``` cout << dist[end] << endl; ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑头

可怜可怜我这个人吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值