原题链接:上车人数
其实核心就是第二站的人数,因为题目没说第二站上车多少人、下车多少人,但是肯定有人上车上车、下车,于是就用一个循环,从1个人开始遍历,看看到底循环变量到几(也就是第二站上车、下车多少人)才满足第n-1站人数等于m人。还需要注意一点的就是第n-1站人数就已经确定了,最后一站全部人员下车,不存在新的上车人,详细代码如下:
参考代码:
#include <stdio.h> #include <math.h> int main() { int a = 0, n = 0, m = 0, x = 0; scanf("%d %d %d %d", &a, &n, &m, &x); int siteNumber[n+1];//每一站车上的人数,第0站丢弃不用,从第1站开始,每一个数据元素存储到达该站时汽车上的人数 siteNumber[0] = 0;//第0号元素丢弃不用 siteNumber[1] = siteNumber[2] = a;//第1站和第2站车上都是a人 int onPerson[n+1];//每一站的上车人数 onPerson[0] = 0;//同样将第0号元素丢弃不用 onPerson[1] = a;//第一站上了a人 int downPerson[n+1];//每一站的下车人数 downPerson[0] = 0;//同样将第0号元素丢弃不用 downPerson[1] = 0;//第1站只有人上车,没有人下车 for (int i = 1; i < n+1; ++i) { /* * 既然第二站没说上车、下车多少人,不妨就从1个人开始循环遍历, * 看看第二站到底上多少人才能满足n-1站是m个人, * 注意最后一站是只下人,不上人,在第n-1站时就已经达到了m人 * */ onPerson[2] = i; downPerson[2] = i; //从第三站开始符合规律,即每一站上车人数等于前两站上车人数,下车人数等于上一站上车人数 for (int j = 3; j <= n-1; ++j) { onPerson[j] = onPerson[j-1]+onPerson[j-2]; downPerson[j] = onPerson[j-1]; //计算当前车里的总人数 = 前一站车子上的人数+本站上车人数-本站下车人数 siteNumber[j] = siteNumber[j-1]+onPerson[j]-downPerson[j]; } //如果第n-1站的人数等于m,那就结束循环,同时输出第x站的人数 if (siteNumber[n-1] == m) { printf("%d", siteNumber[x]); break; } } }
0.0分
9 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复