题目要求
P1011题目链接
这题我思考了很久,终于在今天有了比较明确的思路,讲一下吧。
我们先做个表格(手动的,这里为了展示就用Word重做了一个):
这题标签里有Fibonacci,那么与Fibonacci的关联是什么呢? 我们观察表格和理解题意,可以发现,每次上车人数是前两次上车人数的和(上车人数数列类似于Fibonacci数列),下车人数是上一次的上车人数,这就是关系。 不是说一定要套Fibonacci数列才是考察了Fibonacci数列呀!
初次读题,可能有些困惑,觉得这第二站上车人数有用吗?或者会默认为上车a下车a,这样的话你随便代代测试数据就会知道自己错啦,错在哪里? 其实第二次上下车的人是y,即另一个未知量,我们应该单独为了处理它大动干戈,理解到这个份上,你才能自己做出上面的表格,才能有设计算法的思路。
设计的话,我想的也比较简单粗暴,开循环迭代求解出ai的数值,再求出y的系数,用最终下车的m减去ai,再除以y的系数就得到了y,有了y,就可以重新再跑一遍得到x时的ai和yi,相加即是答案。
值得一提的是由于最后一次是有出无进,所以所谓的最后一次下车人数其实是上一次(n-1站)的剩余人数;但最终的第x站,只要不是最后一站,就可以取到本站,而不是上一站。这是特别重要的,当然我没有做第x站是不是最后一站的特判,测试数据也没有,建议大家更细致一些吧!
AC代码(Java语言描述)import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//出发人数、站数、抵终人数、待求站号
int a = scanner.nextInt(), n = scanner.nextInt(), m = scanner.nextInt(), x = scanner.nextInt();
scanner.close();
//先算a
long first_up = a, next_up = 0, sum_a = a, sum_y_num = 0, y = 0, temp_up = 0, temp_down = 0, x_a = a, x_y = 0;
for (int i = 3; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?