4097:报站
总时间限制: 1000ms 内存限制: 65536kB
描述
北京的地铁是很便利的,几乎覆盖了北京所有的重要地点。如果我们常常坐地铁,也会 非常熟悉地铁上报站的声音。”The next station is ZhongGuanCun. Please get ready for your arrival.”。一个乘客在四号线从上车到下车,会听到一系列的车站名:BeiJingDaXueDongMen, ZhongGuanCun, HaiDianHuangZhuang…
现在需要一个程序,对于一名乘客,报出他在乘坐某号线地铁时,从上车到下车经过的 站名(包括上车的站名和下车的站名)。现在请你写一个程序,来实现这个功能。
输入
第一行 n,表示该地铁线路有 n(n<100)个地铁站。从第 2 行到第 n+1 行是有序的 n 个地铁站的站名,站名由英文字母构成,长度不会超过 100,站名不会重复。第 n+2 行为一 个整数 m(m<100),表示有 m 个乘客需要报站名。这之后 m 行,每行为一个乘客上车的站 名和下车的站名。地铁线路没有环线,但是乘客可以正向坐车,也可以返向坐车。
输出
输出 m 行,每行为每个乘客经过的站名,站名中间用空格分隔。行首或行尾不要有多 余的空格。
样例输入
10
BeiJingDaXueDongMen
ZhongGuanCun
HaiDianHuangZhuang
RenMinDaXue
WeiGongCun
GuoJiaTuShuGuan
DongWuYuan
XiZhiMen
XinJieKou
PingAnLi
2
BeiJingDaXueDongMen RenMinDaXue
GuoJiaTuShuGuan ZhongGuanCun
样例输出
BeiJingDaXueDongMen ZhongGuanCun HaiDianHuangZhuang RenMinDaXue
GuoJiaTuShuGuan WeiGongCun RenMinDaXue HaiDianHuangZhuang ZhongGuanCun
问题链接:Bailian4097 报站
问题简述:(略)
问题分析:暴力搜索一下,找出乘车范围,然后输出结果。
程序说明:给出C语言和C++语言两种程序代码。
参考链接:(略)
题记:(略)
AC的C++语言程序如下:
/* Bailian4097 报站 */
#include <bits/stdc++.h>
using namespace std;
const int N = 100;
string name[N];
int main()
{
int n, m;
cin >> n;
for(int i = 0; i < n; i++)
cin >> name[i];
cin >> m;
string start, taget;
int begin, end;
while(m--) {
cin >> start >> taget;
for(begin = 0; begin < n; begin++)
if(start == name[begin]) break;
for(end = 0; end < n; end++)
if(taget == name[end]) break;
if(begin <= end) {
for(int i = begin; i <= end; i++)
if(i == begin) cout << name[i];
else cout << " " << name[i];
} else {
for(int i = begin; i >= end; i--)
if(i == begin) cout << name[i];
else cout << " " << name[i];
}
cout << endl;
}
return 0;
}
AC的C语言程序如下:
/* Bailian4097 报站 */
#include <stdio.h>
#include <string.h>
#define N 100
char name[N][N + 1];
int main()
{
int n, m, i;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%s", name[i]);
scanf("%d", &m);
char start[N + 1], taget[N + 1];
int begin, end;
while(m--) {
scanf("%s%s", start, taget);
for(begin = 0; begin < n; begin++)
if(strcmp(start, name[begin]) == 0) break;
for(end = 0; end < n; end++)
if(strcmp(taget, name[end]) == 0) break;
if(begin <= end) {
for(i = begin; i <= end; i++)
if(i == begin) printf("%s", name[i]);
else printf(" %s", name[i]);
} else {
for(i = begin; i >= end; i--)
if(i == begin) printf("%s", name[i]);
else printf(" %s", name[i]);
}
printf("\n");
}
return 0;
}