1008 Elevator 超简单解法

目录

题目

输入样例1(题目自带)

输出样例1

输入样例2(自编,特殊情况)

输出样例2

提交结果截图

解题思路及源代码


题目

 题目链接:1008 Elevator (PAT (Advanced Level) Practice) 

输入样例1(题目自带)

3 2 3 1

输出样例1

41

输入样例2(自编,特殊情况)

1 5

输出样例2

35

提交结果截图

解题思路及源代码

/******************************************************
 * 解题思路:
 * 1.分析样例:
 * Input:3 2 3 1(第一个数字表示后面有3个请求)
 * 按题中所述,开始在0层
 * 故应该是0->2->3->1,又上一层楼6s,下一层楼4s,暂停5s
 * 所以time = 3*6 + 2*4 + 3*5 = 18 + 8 + 15 = 41
 * 2.解法:
 * a.将所有要停的楼层存储在一个数组floors[N+1]中,N为要停的
 * 楼层总数,floors[0] = 0(保存初始位置);总时长用total_time
 * 表示。
 * b.每次都用floors[i]-floors[i-1](i初值为1),如果结果为
 * 正数,则total_time += 差值*6;
 * 为负数则total_time += 差值相反数*4;
 * c.最后total_time += 5*N。
 * 3.考虑特殊情况:
 * 如果只有一个需要暂停的楼层,则上述解法也能解决。
******************************************************/

#include <iostream>
using namespace std;

int main()
{
    int N, total_time = 0;
    cin>>N;
    int* floors = new int [N+1];
    floors[0] = 0;
    int diff;//差值
    for(int i = 1; i <= N; i++)
    {
        cin>>floors[i];
        diff = floors[i] - floors[i-1];
        if(diff > 0)
            total_time += diff*6;
        else if(diff < 0)
            total_time += (-diff)*4;
    }
    total_time += N*5;
    cout<<total_time;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值