解题思路:
从第二站开始,就需要知道上车人数,由题目得知:第二站一定有人上下车,由于上一站上了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语言代码)浏览:560 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:564 |
矩阵转置 (C语言代码)浏览:1525 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:525 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:583 |
母牛的故事 (C语言代码)浏览:435 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1020 |
ASCII帮了大忙浏览:748 |
蛇行矩阵 (C语言代码)浏览:742 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:994 |