目录
C++猫吃鱼
一、题目要求
1、编程实现
2、输入输出
二、算法分析
三、程序编写
四、运行结果
五、考点分析
七、推荐资料
C++猫吃鱼
第十届蓝桥杯青少年创意编程大赛C++选拔赛真题
一、题目要求
明明家从1号站点出发,开车去旅游,一共要经过n个站点,依次为 2、3.由于明明带上了心爱的小猫,在每个站点都要为小猫提供一条鱼用做美餐(包括1号站点)。除了1号站点只能吃1号站点买的鱼,其他站点既可以吃当地买的鱼,也可吃之前经过的站点买了存入车载冰箱中的鱼,但车载冰箱消耗的电能来自汽油,所以每条鱼用冰箱保存到下一站的费用与各个站点的汽油价格有关;为使问题简化,我们约定:
(1)车从某站开出时油箱中都是此站点刚加的汽油。
(2)车载冰箱能容纳一路上需要的所有鱼。
即:每条鱼的费用既包括购买时的费用,也包括用冰箱保存鱼的费用。
1、编程实现
为了降低小猫吃鱼的总代价,明明预先,上网査到了这几个站点的鱼价和汽油价格。并据此算出每个站点买一条鱼的费用以及从该站点到下一站用冰箱保存一条鱼的费用。你能帮明明算出这一路上小猫吃鱼的最小总费用吗?
2、输入输出
输入描述:第一行: 站点数n,1<n<100
接下来的n行:每行两个以空格分隔的正整数,表示,这一站买一条鱼的费用,以及从这一站把每条鱼保存到下一站的费用,两个费用均为小于 10000 的正整数
输出描述:只有一行,一个整数,即最小总费用
输入样例:
5
6 3
7 1
3 2
8 3
9 5
输出样例:
29
样例数据分析:
- 第一行数据5代表一共5站
- 第二行数据63代表本站购买鱼6元,运费3元,第一站必须一定先购买一条 总花费6元
- 第三行数据71代表本站购买鱼7元,运费1元,从上一站最小花费+运费9元大于本站购买的费用7,所以选择从本站购买鱼总花费 6+7=13元
- 第四行数据32代表本站购买鱼3元,运费2元,从上一站最小花费+运费8元大于本站购买的费用3,所以选择从本站购买鱼,总花费 6+7+3=16元
- 第五行数据83代表本站购买鱼8元,运费3元从上一站最小花费+运费5元,小于本站购买的费用8,所以选择从上站花费加上本站运费总花赛6+7+3+5=21元
- 第六行数据95代表本站购买鱼9元 运费5元,从上一站最小花费+运费8元,小于本站购买的费用9,所以选择从上一站花费加上本站运费总花费6+7+3+5+8=29元
- 最终总花费为29元
二、算法分析
- 解觉本题可以使用多种方法,常见的有贪心、动态规划等
- 这里采用贪心算法实现,即在每到达一个站点计算出当前站点购买鱼还是之前站点购买鱼加上运费两者之间取最小值;关键就在于如何确定之前站点购买鱼的成本计算,可以通过变量用来保存当前最小费用,然后加入到总的成本中;接着再次更新当前站点保留的最小成本的鱼经过当前站点运送到下一个站点的最小费用(即加上当前站点的运算费用,作为到达下一个站点的前面购买鱼的最小费用)
- 最后遍历完所有的站点就得到了最小成本
三、程序编写
#include <bits/stdc++.h>
using namespace std;
int fish[101][2];
int main()
{
int n;
cin >> n;
for(int i=1;i<=n;i++)
{
cin >> fish[i][0] >> fish[i][1];
}
int minn = 1e9,t = 0;
for(int i=1;i<=n;i++)
{
minn = min(minn,fish[i][0]);
t = t + minn;
minn += fish[i][1];
}
cout << t << endl;
}
本文作者:小兔子编程 作者首页:小兔子编程-CSDN博客
四、运行结果
5
6 3
7 1
3 2
8 3
9 5
29
五、考点分析
难度级别:容易,这题相对而言还是比较简单的,具体主要考察如下:
- 充分掌握变量及数组的定义和使用
- 学会贪心算法或者动态规划算法的使用
- 学会输入流对象cin的使用,从键盘读入相应的数据
- 学会for循环的使用,在确定循环次数的时候推荐使用学会
- 学会if条件判断语句的使用,满足一定条件才能执行后面的语句
- 学会if...else...双分支语句的使用,条件满足执行一种处理,不满足执行另一种处理
- 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
- 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
- 充分掌握变量定义和使用、分支语句、循环语句和贪心算法知识的使用及输入输出的用法
PS:方式方法有多种,小朋友们只要能够达到题目要求即可!
七、推荐资料
- 所有考级比赛学习相关资料合集【推荐收藏】