1 条题解
-
0
本题是多组数据输入的公交搭乘等待时间计算问题,解题思路如下:
- 数据输入:不断读取输入,直至遇到
"ENDOFINPUT"
。先获取线路数量n
,再逐行读取每条线路各时间段时长,算出各线路总周期时长。最后获取起始时间start
。 - 等待时间计算:对每条线路,用
start
对总周期时长取余得剩余时间rest
,找出rest
所在时间段。若rest
为 0 则等待时间为 0;否则计算该时间段剩余时间,取所有线路中最短等待时间。 - 结果输出:输出最早能搭乘的最短等待时间。
#include<iostream> #include<sstream> #include<cstring> #include<string> using namespace std; int n,m,timetable[25][15],route[25],sum[25],start; int atoi(string s){ int res; stringstream ss; ss<<s; ss>>res; return res; } int main(){ string s; while(getline(cin,s)&&s!="ENDOFINPUT"){ string temp; for(int i = 0; i < s.size(); i++) if(s[i]<='9'&&s[i]>='0') temp.push_back(s[i]); n = atoi(temp); memset(route,0,sizeof(route)); memset(sum,0,sizeof(sum)); for(int i = 0; i < n; i++){ getline(cin,s); string temp; for(int j = 0; j < s.size(); j++) if(s[j]==' '&&temp.size()>0) timetable[i][route[i]++] = atoi(temp), temp.clear(); else if(s[j]!=' ') temp.push_back(s[j]); if(temp.size()>0) timetable[i][route[i]++] = atoi(temp); for(int j = 0; j < route[i]; j++) sum[i]+=timetable[i][j]; } getline(cin,s); temp.clear(); for(int i = 0; i < s.size(); i++) if(s[i]<='9'&&s[i]>='0') temp.push_back(s[i]); start = atoi(temp); int res = 100000000; for(int i = 0; i < n; i++){ int rest = start; rest = rest%sum[i]; int j = 0; while(rest>timetable[i][j]){ rest-=timetable[i][j]; j++; } if(rest==0){ res = 0; break; } else res = min(res,timetable[i][j]-rest); } cout << res << endl; getline(cin,s); } }
- 数据输入:不断读取输入,直至遇到
- 1
信息
- ID
- 305
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者