正解:
#include<bits/stdc++.h>
using namespace std;
int s,v,m;
int n,a,t,b;
int main()
{
scanf("%d %d",&s,&v);
n = 8*60+24*60;
t = ceil(1.0*s/v)+10;
n = n-t;
if(n>=24*60)//判断是否为前一天
n = n-24*60;
a = n/60;
b = n%60;
printf("%02d:%02d",a,b);
return 0;
}
在不了解向上取整和02d形式输出情况下的代码(不完全正确):
#include<bits/stdc++.h>
using namespace std;
int main() {
int s,v;
int h,f;
int count=0;
scanf("%d %d",&s,&v);
if(s%v ==0 && s/v+10<=480)
{
count=1;
h = (480-s/v) / 60;
f = (480-s/v) % 60-10;
}
if(s%v!=0 && s/v+11<=480)
{
count=1;
h = (480-s/v-1) / 60;
f = (480-s/v-1) % 60-10;
}
//超过480分钟
int er;
if(s%v ==0 && s/v+10>480)
{
count =2;
er = s/v + 10 - 480 ;
h = (1440-er) / 60;
f = (1440-er)% 60;
}
if(s%v!=0 && s/v+11>480)
{
count = 2;
er = s/v + 10 - 480 + 1;
h =(1440-er) / 60;
f = (1440-er) % 60;
}
if(count == 1)
{
if(f == 0)
printf("0%d:00",h);
else if(f >0 && f < 10 )
printf("0%d:0%d",h,f);
else
printf("0%d:%d",h,f);
}
if(count == 2)
{
if(h<10)
{
if(f<10&&f>=0)
{
printf("0%d:0%d",h,f);
}
else if(f>10&&f<60)
printf("0%d:%d",h,f);
}
else if(h>10&&h<=24)
{
if(f<10&&f>=0)
{
printf("%d:0%d",h,f);
}
else if(f>=10&&f<60)
printf("%d:%d",h,f);
}
}
return 0;
}
心得:
ceil()的用法:
C 库函数 double ceil(double x) 返回大于或等于 x 的最小的整数值double ceil(double x)。由此可知,需要小数,可定义为double或者用int*1.0
floor()向下取整;
printf 02d输出:
0 | 在指定填充 padding 的数字左边放置零(0),而不是空格(参见 width 子说明符)。 |
如:07:48