解题思路:
从第二站开始,就需要知道上车人数,由题目得知:第二站一定有人上下车,由于上一站上了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语言代码)浏览:698 |
【偶数求和】 (C++代码)浏览:785 |
C语言训练-角谷猜想 (C++代码)(3N+1问题)浏览:1850 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1071 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:723 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:1292 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:913 |
勾股数 (C语言代码)浏览:830 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:630 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:660 |