题解 P1011 【车站】

· · 题解

“可笑名义上的监管,影身在迷雾之间。靠题解来获得存在感~~”

这道题对于有一些基础的人来说是挺简单的,但还是有一些刚开始接触c++的同学需要详细的题解。 所以……

这篇题解是照顾刚学c++的同学的^_^

美智子小姐是照顾新手的

方法可能有重复,但这篇题解却是前所未有的详细。可以的话帮忙过一下。谢谢!(对管理员说的)

结合代码,讲一下:

#include<iostream>
#include<cstdio>//两句以include开头的,是文件头。用途是把其他的程序段连接到这个程序,从而得到更多函数的运用。
using namespace std;//打了这段话时,大家就可以创建函数了(当然我没用函数)
int a,n,m,x,f[25],sc[25];//这是全局变量。定义的有:题目所述的a、n、m、x,和存放从每一个车站开出后的人数,和每一个车站的上车人数。 
int main()//定义主函数(main不要打错^_^) 
{
  scanf("%d%d%d%d",&a,&n,&m,&x);//scanf是一个可以用比较快的速度读入数据的函数。读入n。(需要打文件#include<cstdio>)
  if(x==n){printf("0");return 0;}//判断,如果要求的车站是终点站,那就直接输出0。(printf和scanf通常配套使用) 
  f[1]=f[2]=sc[1]=a;//赋值。第一站和第二站开出时的人数和第一站上车的人数都是a。 
  for(int i=0;i<=m;i++)//由于我们不知道第二站上车的人数,所以我们可以枚举第二站上车的人数,从而找出正确答案。 
  {
    sc[2]=i;//把第二站上车的人数设为当前模拟的值。 
    for(int j=3;j<n;j++)//从第三站开始模拟到第n-1站。(由于终点站开出时没有人,所以不模拟) 
    {
      sc[j]=sc[j-1]+sc[j-2];//根据题目所述求出当前上车的人数。 
      f[j]=f[j-1]+sc[j]-sc[j-1];//再求出当亲车站开出后的人数。 
    }
    if(f[n-1]==m)//如果第n-1站开出后的人数是m,就可以结束枚举了。(因为终点站下车的人数刚好是m) 
    {printf("%d",f[x]);return 0;}//输出要求的车站开出后车上面的人数,然后结束主函数。 
  }
  return 0;//其实这句话可以省略。(以防万一嘛^_^) 
}

题讲完了,希望大家都有所收获。

最后,祝各位新手的c++旅程中快乐成长!

如果这篇题解帮助了你,妾身想让你帮忙点个赞,谢谢!^_^