最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

餐厅

IT圈 admin 30浏览 0评论

餐厅

题目描述

阿邱最近开了家餐厅。阿邱想了解某一时段至少有多少不同人出入餐厅。阿邱就雇佣了一个人,呆在餐厅门口,有人进入餐厅,他就在纸上记下+,有人出餐厅,他就在纸上记下-。
假设同一时间没有两个人同时进入或出餐厅;也假设最初的时候餐厅中有足够多的人。问,这段时间里,至少有多少人出入餐厅。(不同人出入的顺序是随意的,一个人可以反复出入。)

输入

2
+-+-+
---

输出

1
3

思路

第一反应是用栈,记录最大长度,发现过不了。后来又想到找最长的连加或者连减串,发现还是过不了,后经同学提醒了一组刁钻的用例

---+++-+++

输出为5
我的代码好像过不了这个用例,于是只好换了一种思路。
要寻找最少人数,本质上是进与出左右拉扯,两边端点的距离即是最少人数。

代码

#include<stdio.h>
#include<string.h>
int main() {int m, i, add, sub, num;char ch;scanf("%d", &m);getchar();for (i = 0;i < m;i++) {add = sub = 0;num = 0;while ((ch = getchar()) != '\n') {if (ch == '+') {num++;if (num > add)add = num;}else {num--;if (num < sub)sub = num;}}printf("%d\n", add - sub);}
}

餐厅

题目描述

阿邱最近开了家餐厅。阿邱想了解某一时段至少有多少不同人出入餐厅。阿邱就雇佣了一个人,呆在餐厅门口,有人进入餐厅,他就在纸上记下+,有人出餐厅,他就在纸上记下-。
假设同一时间没有两个人同时进入或出餐厅;也假设最初的时候餐厅中有足够多的人。问,这段时间里,至少有多少人出入餐厅。(不同人出入的顺序是随意的,一个人可以反复出入。)

输入

2
+-+-+
---

输出

1
3

思路

第一反应是用栈,记录最大长度,发现过不了。后来又想到找最长的连加或者连减串,发现还是过不了,后经同学提醒了一组刁钻的用例

---+++-+++

输出为5
我的代码好像过不了这个用例,于是只好换了一种思路。
要寻找最少人数,本质上是进与出左右拉扯,两边端点的距离即是最少人数。

代码

#include<stdio.h>
#include<string.h>
int main() {int m, i, add, sub, num;char ch;scanf("%d", &m);getchar();for (i = 0;i < m;i++) {add = sub = 0;num = 0;while ((ch = getchar()) != '\n') {if (ch == '+') {num++;if (num > add)add = num;}else {num--;if (num < sub)sub = num;}}printf("%d\n", add - sub);}
}
发布评论

评论列表 (0)

  1. 暂无评论