P5707 上学迟到--官方测试用例不全面
查看原帖
P5707 上学迟到--官方测试用例不全面
503803
jiantao楼主2021/4/18 16:55

这道题没有测试“出发时间为整点”的用例,例如“530 1”出发时间为提前一天23:00,“110 2”出发时间为早上07:00。导致的结果就是有一些同学提交的代码存在逻辑漏洞但是也能AC。 例如

#include<bits/stdc++.h>
using namespace std;
int main(){
	int s,v,cost;
	cin>>s>>v;
	cost=ceil(s/double(v))+10;//总耗时,单位:分钟 	
	if(ceil(cost/60.0)<=8)//需要提前一天出发 
		cout<<setw(2)<<setfill('0')<<(8-ceil(cost/60.0))<<':'<<setw(2)<<setfill('0')<<(60-cost%60);
	else//不需要提前一天出发 
		cout<<setw(2)<<setfill('0')<<(24+8-ceil(cost/60.0))<<':'<<setw(2)<<setfill('0')<<(60-cost%60);
	return 0;
}  

上面这份代码就没有考虑整点问题,也就是说你输入“530 1”会输出23:60,但是这份代码它能AC。这就说明这一题的测试用例不够全面。下面是修改后的代码就完美解决了上述问题

#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
  int s,v,cost;
  cin>>s>>v;
  
  cost=ceil(s/double(v)+10);//总耗时,单位:分钟 
  
  if(ceil(cost/60.0)<=8)//需要提前一天出发 
  	cout<<setw(2)<<setfill('0')<<(8-ceil(cost/60.0))<<':';
  else//不需要提前一天出发 
  	cout<<setw(2)<<setfill('0')<<(24+8-ceil(cost/60.0))<<':';
  	
  if(cost%60==0)//时间是整点 
  	cout<<setw(2)<<setfill('0')<<(0);
  else//时间不是整点 
  	cout<<setw(2)<<setfill('0')<<(60-cost%60);
  	
  return 0;
}
2021/4/18 16:55
加载中...