@[kingOIER](/user/808143) 你没考虑h减完之后小于0的情况,比如8:00减去9h,10min
应该等于 22:50
而非0-2:50
by s47rsl @ 2023-04-13 18:03:39
@[s47rsl](/user/990167) 我不是通过判断来避免这种情况了吗?
你能帮我按你的想法改一下我的程序吗?
by kingOIER @ 2023-04-14 16:59:11
@[kingOIER](/user/808143) 哦确实,你加判断了。我没看明白你这个思路,你可以试试输入5400 10 ,这个案例正好是9个小时,再加10min,结果应该正好是22:50,但你这个输出是23:49,另外你第8行t为什么+1呢。\
没思路可以看下我的,我专门给你写了详细注释:
```cpp
#include<iostream>
using namespace std;
int main(){
double s,v;
cin>>s>>v;
double m=s/v;//先求分钟总数
int h=0;
m+=10;//加上捡垃圾时间
while(m>=60){/*将分钟数中够凑小时的部分取出,使得m为分钟部分*/
m-=60;
h+=1;//凑够一个小时,小时数就加1
}
double tm=m;//初始化最后要输出的分钟部分
int th=8-h;//初始化小时部分
if(th<0){ /*小于零则说明要减少的部分大于八小时,即需要到前一天出发了*/
th+=24;/*则前一天的小时数为该值+24,如-1,应该是前一天的23点*/
}
if(m>0){/*接下来减去分钟数*/
th-=1;
tm=60-m;
}
if(th<10) cout<<0;
cout<<th<<":";
if(tm<10) cout<<0;
cout<<(int)tm;
return 0;
}
//made by luogu s47rsl
```
by s47rsl @ 2023-04-14 22:30:12
@[s47rsl](/user/990167) 非常感谢,但我现在改完的程序只有90分,能再帮我看下哪里又出问题了吗?```
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int s,v,t,h,min;
cin>>s>>v;
if(s%v==0)//不满一分钟提前出发
{
t=s/v;
}
else
{
t=s/v+1;
}
t+=10;
if(t/60>8)//判断是否在前一天
{
h=31-t/60;
min=60-ceil(t%60);
}
else
{
h=7-t/60;
min=60-ceil(t%60);
}
if(min==60)
{
min=0;
h++;
}
if(h>10)//输出
{
if(min>10)
{
cout<<h<<":"<<min;
}
else
{
cout<<h<<":0"<<min;
}
}
else
{
if(min>10)
{
cout<<"0"<<h<<":"<<min;
}
else
{
cout<<"0"<<h<<":0"<<min;
}
}
return 0;
}
```
by kingOIER @ 2023-04-18 17:29:43
```
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int s,v,t,h,min;
cin>>s>>v;
if(s%v==0)
{
t=s/v;
}
else
{
t=s/v+1;
}
t+=10;
if(t/60>8)
{
h=31-t/60;
min=60-ceil(t%60);
}
else
{
h=7-t/60;
min=60-ceil(t%60);
}
if(min==60)
{
min=0;
h++;
}
if(h>10)///cout
{
if(min>10)
{
cout<<h<<":"<<min;
}
else
{
cout<<h<<":0"<<min;
}
}
else
{
if(min>10)
{
cout<<"0"<<h<<":"<<min;
}
else
{
cout<<"0"<<h<<":0"<<min;
}
}
return 0;
}
```
@[s47rsl](/user/990167)
by kingOIER @ 2023-04-18 17:30:12
老哥我看应该是输出的问题 你用c语言printf%02d应该没问题 还有分钟可以用60-t%60来处理
by 91xrz @ 2023-04-18 17:56:17