题目链接:P5707 【深基2.例12】上学迟到 - 洛谷
思路一:进制计算想到了小时候“不够减怎么办,向前借一位”的方法解决本题,其他方法太过复杂且当s过大,v过小时,容易失效。不用计算哪一日,所以输出小时,时间进制固定。
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//接收输入
Scanner scanner = new Scanner(System.in);
int s = scanner.nextInt();
int v = scanner.nextInt();
int m = (s % v == 0) ? 0 : 1;//判断有没有走完路程,向上取整
int n = 8 * 60 - m - s / v- 10;//计算分钟(当天时间8:00-剩余路程的时间(0/1)--倒垃圾10分钟)
int hour = n / 60, minute = n - hour * 60;//计算小时和分钟
//分钟为负数,向小时借一(60分钟)
if (minute < 0) {
minute += 60;
hour -= 1;
}
//小时为负数,向天数借一(24小时)
while (hour < 0) {
hour += 24;
}
//format生成格式化的字符串,数字前面补0,%d整数类型(十进制)
String str = String.format("%02d", hour);
String str1 = String.format("%02d", minute);
System.out.println(str + ":" + str1);
}
}
思路二代码:
P5707题解 - 作者:望庐山瀑布 的博客 - 源代码地址:洛谷博客
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int s = scanner.nextInt();
int y = scanner.nextInt();
Calendar date = Calendar.getInstance();
date.set(2021, Calendar.MAY, 5, 8, 0, 0);
date.add(Calendar.MINUTE, -10);
date.add(Calendar.MINUTE, s % y == 0 ? -(s / y) : -(s / y) - 1);
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
System.out.println(format.format(date.getTime()));
}
}
注:转载仅用于学习交流,非盈利