专栏首页C语言及其他语言【优秀题解】题号:1179

【优秀题解】题号:1179

关注我们

今天给大家带来一份优秀题解(题号: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 ;

}

本文分享自微信公众号 - 编程范(dotcpp),作者:行者还小

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【编程经验】优秀题解

    今天给大家带来一个我站“Manchester”大神写的一份优质题解(j解题思路很清晰):原题问题:1709: 算法7-16:弗洛伊德最短路径算法:

    编程范 源代码公司
  • 【优秀题解】绝对值排序】(合并排序详解+图解)

    原题链接:http://www.dotcpp.com/oj/problem1169.html (大家可以自行提交) 解题思路: 1.采用分治法思想,把整个序列...

    编程范 源代码公司
  • 【优秀题解】 题解1179:上车人数 (C++描述)(求出规律即可,简单易懂)

    解题思路: 我们只需要罗列出每一站的上车人数和每一站的下车人数来求出总数即可看出规律。

    编程范 源代码公司
  • BZOJ5249: [2018多省省队联测]IIIDX(线段树 贪心)

    不难发现题目给出的是一个树,其中\(\frac{i}{K}\)是\(i\)的父亲节点

    attack
  • 3117 高精度乘法

    3117 高精度练习之乘法  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 给出...

    attack
  • 浙大版《C语言程序设计(第3版)》题目集 习题5-4 使用函数求素数和

    其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数PrimeSum返回区间[m, n]内所有素数的和。题目保证用户传入的参数m≤n。

    C you again 的博客
  • 浙大版《C语言程序设计(第3版)》题目集 习题4-6 水仙花数

    水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。

    C you again 的博客
  • Day2上午解题报告

    预计分数:100+0+60=160 实际分数:100+0+60=160 mmpT1数据错了。。。 T1遭遇 题目描述 你是能看到第一题的 friends呢。 —...

    attack
  • 10:Challenge 3(树状数组直接修改)

    总时间限制: 10000ms单个测试点时间限制: 1000ms内存限制: 262144kB描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)...

    attack
  • 洛谷P1043 数字游戏

    题目描述 丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前...

    attack

扫码关注云+社区

领取腾讯云代金券