题解 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;//其实这句话可以省略。(以防万一嘛^_^)
}
题讲完了,希望大家都有所收获。