原题链接:上车人数
解题思路:
从第二站开始,就需要知道上车人数,由题目得知:第二站一定有人上下车,由于上一站上了a个人,那么第二站最多下车人数是a,由于第二站的下车人数与上车人数相等,那么第二站上车人数的范围应该在1到a之间,后续每一站上下车的人数都可递推得出,同时记录车开走时车上的人数,若到第n站时人数等于m,递推成功,输出结果。
注意事项:
车从最后一站开走时,人全都下车后,车上人数为0。
参考代码:
#include<stdio.h> #include<stdlib.h> int main(){ int i,a,n,m,x,s,*sc,*xc,*r; scanf("%d%d%d%d",&a,&n,&m,&x); sc=(int *)malloc((n+1)*sizeof(int)); xc=(int *)malloc((n+1)*sizeof(int)); r=(int *)malloc((n+1)*sizeof(int)); sc[1]=a;//第一站上车人数 xc[1]=0;//第一站下车人数 r[1]=a; //从第一站开走时车上人数 for(sc[2]=1;sc[2]<=a;sc[2]++){//从1到a假设第二站上车人数 s=a; xc[2]=sc[2];//第二站下车人数 s+=sc[2]; s-=xc[2]; r[2]=s;//从第二站开走时车上人数 for(i=3;i<n;i++){ sc[i]=sc[i-1]+sc[i-2];//第i站上车人数 xc[i]=sc[i-1];//第i站下车人数 s+=sc[i]; s-=xc[i]; r[i]=s;//从第i站开走时车上人数 } r[i]=0; if(s==m) break;//到第n站时车上人数是否为m } printf("%d\n",r[x]); if(NULL!=sc) free(sc); if(NULL!=xc) free(xc); if(NULL!=r) free(r); return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复