解题思路:
1.设共n=7个站,第一站上车a=5人,最后一站下车32人,设第二站上车人数为x(其下车人数等于上车人数)
2.罗列:
①:第一站上车人数为:0*x+5,此时共有5人 (为了好求x,以及便于理解故写作0*x+5)
②:第二站上车人数为:1*x+0,下车x人 此时共有5人
③:第三站上车人数为:1*x+5,下车人数为x ,此时共有5+ (5) =10人
④:第四站上车人数为:2*x+5,下车人数为x+5,此时共有10+ (x) =10+x
⑤:第五站上车人数为:3*x+10,下车人数为2*x+5,此时共有10+x+ (x+5) =15+2*x
⑥:第六站上车人数为:5*x+15,下车人数为3*x+10,此时共有15+2*x+ (2*x+5) =20+4*x==32
红色的系数存入A[ ],蓝色的数存入B[ ]
(第七站全下车32人,故x=3)
⑦:第七站上车人数为:8*x+25,下车人数为5*x+15,此时共有20+4*x+ (3*x+10) =30+7*x
⑧:第八站上车人数为:13*x+40,下车人数为8*x+25,此时共有30+7*x+ (5*x+15) =
3.规律:
①:第一站,第二站车上人数为a=5,从第三站开始,包括第三站,每站的人数等余,上车前人数加上上上一站的上车人数。
比如第四站车上人数等于:(5)+ (0*x+5)+ (1*x+0) =10+x即:a+第一站上车人数+第二站上车人数
同理第六站车上人数等于:(5)+ (0*x+5)+ (1*x+0)+(1*x+5)+(2*x+5)=20+4*x==32
即:a+第一站上车人数+第二站上车人数+第三站上车人数+第四站上车人数 (只加到六减二站)
4.根据规律,以及A[ ],B[ ] ,以第六站为例:20+4*x==32
其中20= 5+5+0+5+5= a+B[0]+B[1]+B[2]+[3]
其中4= 0+1+1+2=A[0]+A[1]+A[2]+A[3]
令bb代表B[0]+B[1]+B[2]+[3] ,aa代表A[0]+A[1]+A[2]+A[3]
求出bb,aa 就可以求出x
知道x后,就可以根据以上罗列求出,每一站的上车人数,下车人数,以及车上人数;
注意:(以上所有x不是题目中第几站x,它是第二站上下车人数)
参考代码:
#include<stdio.h> #include<malloc.h> void qiu_A(int *A,int n); //求A[] void qiu_B(int *B,int n,int a);//求B[] void fun_ction(int *A,int *B,int a,int n,int x,int m); //求X第二站上下车人数 void output_up(int *A,int *B,int a,int n,int x,int m,int X);//输出上车人数 void output_down(int *A,int *B,int a,int n,int x,int m,int X);//输出下车人数 void output_left(int *A,int *B,int a,int n,int x,int m,int X);//输出车上人数 /*=====================================================================*/ int main() { int a,n,m,x; while(scanf("%d%d%d%d",&a,&n,&m,&x)!=EOF) { int *A=(int *)malloc((n-1)*sizeof(int)); int *B=(int *)malloc((n-1)*sizeof(int)); qiu_A(A,n); //求A[] qiu_B(B,n,a);//求B[] fun_ction(A,B,a,n,x,m); } return 0; } /*=====================================================================*/ void qiu_A(int *A,int n) { A[0]=0; A[1]=1; for(int i=2;i<n-1;i++) A[i]=A[i-1]+A[i-2]; } /*=====================================================================*/ void qiu_B(int *B,int n,int a) { B[0]=a; B[1]=0; for(int i=2;i<n-1;i++) B[i]=B[i-1]+B[i-2]; } /*=====================================================================*/ void fun_ction(int *A,int *B,int a,int n,int x,int m) { int aa=0,bb=0; for(int i=0;i<n-3;i++) { aa+=A[i]; bb+=B[i]; } int X=(m-a-bb)/aa; //据上述规律求X(第二站上下车人数) //printf("X=%d\n",X); //output_up(A,B,a,n,x,m,X); //输出第x站上车人数 //output_down(A,B,a,n,x,m,X);//输出第x站下车人数 output_left(A,B,a,n,x,m,X); //输出第x站车上人数 } /*=====================================================================*/ void output_up(int *A,int *B,int a,int n,int x,int m,int X) { printf("up==%d\n",A[x-1]*X+B[x-1]); return ; } /*=====================================================================*/ void output_down(int *A,int *B,int a,int n,int x,int m,int X) { if(x==1) //第一站无人下车 printf("no one get off\n"); else if(x==2) //第二站上下车人数相等,且等于X printf("down==%d\n",X); else printf("down==%d\n",A[x-2]*X+B[x-2]); //上一站上车人数 return ; } /*=====================================================================*/ void output_left(int *A,int *B,int a,int n,int x,int m,int X) { int aa=0,bb=0; for(int i=0;i<x-2;i++) { aa+=A[i]; bb+=B[i]; } printf("%d\n",a+aa*X+bb); return ; }
别忘点赞哦-.-
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复