HDOJ 1036 输入输出 水
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1036
我也不知道这题考查什么,感觉就是考细心。
1.时间要能正确的读,输出的格式要对。
2.结果要四舍五入。
说一下四舍五入的方法,刚从别人那里学的。
假设a为要舍入的数,res为结果。
1.精确到个位。int res = a + 0.5;
2.精确到小数点后第k位。
double a, res, base; int k; double base = pow(10.0, k * 1.0); res = ((int)(a * base + 0.5)) / base;
经简单测试,有效。
PS:上面的高亮显示貌似有问题啊,base不是C++的保留字吧。
下面是解题代码。
#include <iostream> using namespace std; int isQualified(char *str) { for (int i = 0;i < strlen(str);i ++) { if (str[i] == '-') return 0; } return 1; } int main () { int sectionNum; double totalDist; scanf("%d%lf",§ionNum,&totalDist); char aLine[1000]; int teamId; while (scanf("%d",&teamId) != -1) { //以秒为单位的总时间 double timeInSec = 0.0; int hour,min,sec; int iIsQualified = 1; char aRec[100]; for (int i = 1;i <= sectionNum;i ++) { //一个记录 scanf("%s",aRec); //如果没有'-',才需要加入总时间 if (isQualified(aRec)) { sscanf(aRec,"%d:%d:%d",&hour,&min,&sec); timeInSec += hour * 3600 + min * 60 + sec; } else iIsQualified = 0; } if (iIsQualified == 0) { printf("%3d: -\n",teamId); continue; } double secPerKm = timeInSec / totalDist; int resMin = secPerKm / 60; int resSec = secPerKm - resMin * 60 + 0.5; if (resSec == 60) { resSec = 0; resMin ++; } //如果resSec是单数,要补0 printf("%3d: %d:%02d min/km\n",teamId,resMin,resSec); } return 0; }

浙公网安备 33010602011771号