杭电ACM 1008题电梯问题C++解题思路


在这里插入图片描述

题目要求:

我们城市最高的建筑物只有一部电梯。请求列表由N个正数组成。数字按指定顺序指示电梯将停在的楼层。将电梯上移一层需要花费6秒钟,而将一层下移则需要4秒钟。电梯将在每个站点停留5秒钟。

对于给定的请求列表,您将计算完成列表上的请求所花费的总时间。电梯在开始时位于0楼,并且在满足请求后不必返回一楼。

输入格式:

有多个测试用例。每个案例包含一个正整数N,后跟N个正数。输入中的所有数字均小于100。N = 0的测试用例表示输入结束。该测试用例将不被处理。

输入样本:

1 2
3 2 3 1
0

输出样本:

17
41

题目分析:

输入的第一个字符代表N层楼,以空格为间,后续数字代表楼层变化
首先我们要知道是从1楼开始的,所以第一个楼层固定乘以6,
然后我们可以建一个数组,用来存放楼层编号,
用循环比较相邻两层楼的大小,若前一层比这层大,
则电梯是下降,反之为上升。用中间变量sum把时间相加,
最后再加上每层楼停留时间5秒就能得到答案。

代码:

#include <iostream>
#include <cmath>
using namespace std;

int main(){
	int n,in;
	int m[100];
	while(cin >> n){  //输入的第一个数为后续有N层楼 
		int sum = 0,i = 0;
	
		in = n;
		if( n == 0 ){  //如果输入为0则结束 
			break;
		}else{
			while(in--){
				cin >> m[i++]; 	//将输入的楼层赋值给数组保存			
			}
			
			sum += 6*m[0];  //起点从零层起步,第二个数字是第一次的楼层 
			
			for(int j = 0;j < n-1 ;j++){
				if(m[j] > m[j+1]){
					sum += abs(m[j] - m[j+1])*4;  //下降 
				}else if(m[j] < m[j+1]){
					sum += abs(m[j] - m[j+1])*6;  //上升 
				}
			}			
			sum += n*5;  //每层停留时间 
		}		
		cout<<sum<<endl;

	}
	return 0;
} 

输入结果:

在这里插入图片描述

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值