前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【优秀题解】题号:1179

【优秀题解】题号:1179

作者头像
编程范 源代码公司
发布2018-04-18 10:35:39
6550
发布2018-04-18 10:35:39
举报

关注我们

今天给大家带来一份优秀题解(题号:1179):

解题思路

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 ;

}

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程范 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档