Bootstrap

上学迟到问题

刚看到这题时,我突然就有了思路。说起来挺可笑的当我写完这题后,并成功AC时,看着我那冗长的代码我陷入了深思,难道真的有必要写这么一长串吗?

这是我的代码

#include<stdio.h>
int main(){
	int s,v,t;
	scanf("%d %d",&s,&v);
	if(s%v!=0) t = s/v + 1 + 10;
	else  t = s/v + 10;
	int x = t%60;
	int y = (t-x)/60;
    if(t<=480)
    {if(x>0){
    	if(60-x<10) printf("0%d:0%d",8-y-1,60-x);
    	else printf("0%d:%d",8-y-1,60-x);}
    	else printf("0%d:00",8 - y);
	}
	else{
		t = t - 480;
		int i = t%60;
		int j = t/60;
		if(t<=840){if(i>0){
			if(60-i<10) printf("%d:0%d",24-j-1,60-i);
			else printf("%d:%d",24-j-1,60-i);}
			else printf("%d:00",24-j);
		}else{
			t = t - 840;
			int a = t%60;
			int b = t/60;
			if(a>0){if(60-a<10) printf("0%d:0%d",10-b-1,60-a);
			else printf("0%d:%d",10-b-1,60-a);}
			else printf("0%d:00",10-b);
		}
		
	}
	
	return 0;
}

完全就是高中生分类讨论的思维,好在是细心, 一遍就ac要是哪里粗心一点,就真的无从检查了:思路其实很好理解,分三个时间段,08到00小时,24到10小时,10到08小时,因为这三段的代码我没有想到如何统一所以只能这样了。

                                                          这是题解代码

#include <iostream>
#include <cstdio> 
#include <cmath> 

using namespace std;

const int CLK = 24;  // 24小时制 
const int LMT_H = 8;  // 到校小时上限 
const int LMT_M = 0;  // 到校分钟上限 
const int EXT = 10;  // 额外消耗分钟数

int main() {
	int s, v;
	cin >> s >> v;
	
	int costM = ceil(1.0 * s / v) + EXT;  // 计算消耗分钟
	int costH = ceil(1.0 * costM / 60);  // 计算消耗小时
	costM %= 60;  // 保留60进制下的分钟部分 
	printf("%02d:%02d", (LMT_H - costH + CLK) % CLK, (LMT_M - costM + 60) % 60);  // 输出结果 

	return 0;
}

虽然我还是小白看不懂题解,但我是真的羡慕简洁的语言所带来的优美感!

;