花露水和暖壶


私信TA

用户名:MichaelMeng

访问量:8655

签 名:

等  级
排  名 82
经  验 9156
参赛次数 0
文章发表 28
年  龄 0
在职情况 学生
学  校 烟台大学
专  业

  自我简介:

不喜欢摇滚乐的研究生不是好程序猿!

    其实核心就是第二站的人数,因为题目没说第二站上车多少人、下车多少人,但是肯定有人上车上车、下车,于是就用一个循环,从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分

12 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区