题目传送门
思路:
这道题的目标是计算在 N 天内游览城市所需的最小火车票花费。我们有两种火车票可以选择:单程票和单日票。单程票每次乘坐花费 x 元,而单日票可以在一天内不限次数乘坐,花费 y 元。
具体步骤如下:
- 读取输入数据,包括天数 N、单程票价格 x、单日票价格 y 以及每天需要乘坐的火车次数 ai。
- 初始化总花费为 0。
- 对于每一天 i:
- 计算如果购买单程票的总花费:ai * x。
- 比较 ai * x 和 y,选择较小的值作为这一天所需的最小花费。
- 将这一天的最小花费加到总花费中。
- 输出总花费。
通过这种方法,我们可以确保每一天都选择了最经济的购票方式,从而得到整个行程的最小花费。
代码&解释:
c++代码:
#include<iostream>
using namespace std;
int n,oneway,singleday;
int day[114514];
int cost = 0;
int main(){
cin>>n>>oneway>>singleday;
for(int i = 1;i <= n;i++){
cin>>day[i];
if(day[i] * oneway < singleday){
int x = day[i] * oneway;
cost += x;
}
else cost += singleday;
}
cout<<cost<<endl;
}
代码解释:
-
变量声明:
声明了变量
n
(天数)、oneway
(单程票价格)、singleday
(单日票价格)、day
数组(存储每天的火车乘坐次数)和cost
(总花费)。 -
主函数:
int main(){ cin >> n >> oneway >> singleday; for(int i = 1; i <= n; i++){ cin >> day[i]; if(day[i] * oneway < singleday){ int x = day[i] * oneway; cost += x; } else cost += singleday; } cout << cost << endl; }
- 读取输入的
n
、oneway
和singleday
。 - 循环读取每天的火车乘坐次数
day[i]
。 - 对于每一天,计算如果购买单程票的总花费
day[i] * oneway
,并与单日票价格singleday
比较,选择较小的花费累加到cost
中。 - 最后输出总花费
cost
。
- 读取输入的
Python代码:
def min_cost(n, oneway, singleday, days):
cost = 0
for ai in days:
single_cost = ai * oneway
day_cost = min(single_cost, singleday)
cost += day_cost
return cost
# 读取输入
n, oneway, singleday = map(int, input().split())
days = list(map(int, input().split()))
# 计算并输出最小花费
print(min_cost(n, oneway, singleday, days))
代码解释:
-
函数定义:
def min_cost(n, oneway, singleday, days): cost = 0 for ai in days: single_cost = ai * oneway day_cost = min(single_cost, singleday) cost += day_cost return cost
CopyInsert
定义了一个函数
min_cost
,接受天数n
、单程票价格oneway
、单日票价格singleday
和每天的火车乘坐次数列表days
,返回最小花费。 -
读取输入:
n, oneway, singleday = map(int, input().split()) days = list(map(int, input().split()))
CopyInsert
读取输入的
n
、oneway
和singleday
,以及每天的火车乘坐次数列表days
。 -
计算并输出最小花费:
print(min_cost(n, oneway, singleday, days))
CopyInsert
调用
min_cost
函数计算最小花费并输出结果。通过这种方式,Python代码实现了与C++代码相同的功能,即计算在N天内游览城市所需的最小火车票花费。
Pascal代码:
program Tourist;
const
MAXN = 1000;
var
n, oneway, singleday, i, cost: longint;
day: array[1..MAXN] of longint;
begin
// 初始化总花费
cost := 0;
// 读取输入
readln(n, oneway, singleday);
for i := 1 to n do
read(day[i]);
// 计算最小花费
for i := 1 to n do
begin
if day[i] * oneway < singleday then
cost := cost + day[i] * oneway
else
cost := cost + singleday;
end;
// 输出结果
writeln(cost);
end.
代码解释:
-
常量声明:
const MAXN = 1000;
声明数组的最大长度为
1000
,符合题目数据范围。 -
变量声明:
var n, oneway, singleday, i, cost: longint; day: array[1..MAXN] of longint;
声明了变量
n
(天数)、oneway
(单程票价格)、singleday
(单日票价格)、i
(循环变量)、cost
(总花费),以及数组day
(存储每天的火车乘坐次数)。 -
读取输入:
readln(n, oneway, singleday); for i := 1 to n do read(day[i]);
使用
readln
读取n
、oneway
和singleday
,然后使用for
循环读取每天的火车乘坐次数day[i]
。