2018 hdu 1011/6308 Time Zone 一道水题的学习过程!
这道题的题意是:
以北京时区东八区 UTC+ 8 为标准,给出一个具体时间,转换成相应时区要求的具体时间。
刚看到这道题的时候,感觉非常的简单,
把字符串中的数字提取出来,然后与八进行比较,加减运算,输出就可以了。
但我慢慢的遇到困难,
首先,我如何把字符串中的数字提取出来,对于非常000基础的人还真的蛮难。
我百度了各种答案,使用指针,等各种我看不懂的办法
最终我使用了atof()函数
其实最开始使用的是atoi()函数,一个小时之后才可能发现题目数据要求可以是小数,所以匆忙的学习如何提取字符串中的小数并且进行处理。
百度如下:
atof() 将字符串转换为双精度浮点型值
atoi() 将字符串转换为整型值
atol() 将字符串转换为长整型值
strtod() 将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字
strtol() 将字符串转换为长整值,并报告不能被转换的所有剩余数字
strtoul() 将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字
在格式输出的时候总是,第一组数据是对的,第二组总是会出问题,到现在还不知道是什么原因。
考虑的太少,甚至题目没有给出负数的数据,就没有想到会有负数处理的情况。
到后面越来越乱,心情也焦躁,放弃了这道题。
后来调整了一下,看了大家补题的代码和题解进行学习。
简单知道:#include <bits/stdc++.h>是万能头文件。以及复习了浮点数的精度问题和处理问题。
第一点:对于字符串的提取(非常简单):
scanf("%d %d UTC%lf", &h, &m, &d);
第二点:为什么必须要转化为分钟运算,这个问题我想了很久。空想是想不通的,我必须把用小时做的代码写出来之后才能知道为什么要用分钟做。
这个过程中,我在百度上查了一下小时时区的转化,但是没有找到,很少有国家用小数时区。
最开始我把我的思路写了出来:
11 11 +8.2
把8.2转化为整数型,然后减去他的整数型
8.2-8,在处理他的小数部分,乘以0.2*60=12min
已知h:m
则,m=m+12;h=h+(8-8)
输出h:m
这样不可以吗
网上思路:
h = h * 60 + m;
int c = 0;
if(d > 0) {
c = (int)(d * 10 + 0.1);
} else {
c = (int)(d * 10 - 0.1);
}
c = c * 6 - 80 * 6;
h += c;
h %= (24 * 60);
if(h < 0) h += 24 * 60;
printf("%02d:%02d\n", h / 60, h % 60)
我最后进行尝试了一下具体数据,发现答案是相同的。
网上思路:
11:11
h=11*60+11=671
h=671+12=683
h%=24*60=683
h:m=11:23
我的思路:
11+12=23
11+(8-8)=11
h:m=11:23
接下来就是具体代码实现了!
具体实现中还是会遇到很多困难,比如需要考虑正负号对结果的影响,比如如果超过24时的处理,这些都是我未知,并且凭空想象不出来的。我不知道从哪里下手去解决它。多测试几组数据吗?我现在都要开始怀疑自己的脑子是不是和别人不一样了?
感觉好多大佬做题的思路就是凭直觉就认为这个是对的,具体的证法他们可能也不知道。但是感觉我自己的直觉都是错的,并且如果不能把思路清楚的整理我就无法完成这个题目。
试着测试各种数据,尝试各种可能性,然后头大,这可能是我被一道水题逼疯的过程。现在据我开始写这道题大概两个半小时。
又突然反应到,自己可能时区都不会算,UTC+8,UTC-8有什么区别呢,是东八区和西八区吗,遇到一个时间又该怎么计算,我又冒出了好多问题,开始百度。查过百度之后,感觉自己不是不会,而是脑子已经转不过来了。但我计划把这道题写完。
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--){
int h,m;
double s;
scanf("%d %d UTC%lf",&h,&m,&s);
printf("%lf ",s);
int c=0;
c=(int)s;
printf("%lf ",c);
int hh=h+(s-8);
if(hh<0)h=hh+24;
c=int ((s-c+0.01)*60);
printf("%lf ",c);
m=m+c;
if(m<0){h--;m=m+59;}
printf("%02d:%02d\n",h,m);
}
return 0;
}
改了一点,代码大致都是对的,评测是超时,不知道怎么办了。是方法的错误?
下一篇: JavaScript之对象Object