当前位置: 首页 > news >正文

【ACM】杭电1036:Average is not Fast Enough!


这道题的大意是让你来计算各个接力队的平均速度。输入的第一个数N意思是比赛的节数,第二个数D 为赛道的距离,单位是千米。第二行第一个数是队伍编号,这个没有什么意义,照着输出就行了,后面是一个以h:mm:ss格式表示的时间,以空格分隔,意为这个队伍完成这一小节比赛所消耗的时间,把所有的时间加起来就是这个队跑完全程(也就是上面输入的D)所用的总时间。我们的任务是,对于每一组输入数据,输出这个队伍的平均速度,单位是min/km

分析:

这道题没有难度,但有几点需要注意的地方:

1、输入队伍编号的时候要用%3d格式,否则前面的空格就会把输入搞乱了

2、可以把h:mm:ss格式的时间当做字符串输入,存放在一个char数组中,然后用 strtok函数一步一步地把里面的数字分离出来。

3、要把单位换算成 m:ss,min/km,即跑一千米用多少时间。

4、计算结果的过程中注意要四舍五入,不能全部用整形变量,否则会因为误差而Wrong Answer。

5、输出结果时,注意当秒数只有1位数的时候要在前面补0(不能出现4:8这种格式),否则依然Wrong Answer.


代码和注释:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
	int hh,mm,ss;
}TIME;
typedef struct
{
	char ch[20];
}STRING;
int is_qualified(char *s,int len)
{
	int i;
	for(i = 0 ; i < len ; ++i)
	{
		if('-' == s[i])
			return 0;
	}
	return 1;
}
int get_time(TIME *pTime,char *s,int len,STRING *str) /* ·µ»Ø×ܵÄÃëÊý */
{
	int t = 1,i,res = 0;
	char *pT = strtok(s," ");
	while(pT) /* °´¿Õ¸ñ·Ö¸î£¬°Ñÿ×éʱ¼ä·ÖÀë³öÀ´ */
	{
		if(0 == is_qualified(pT,strlen(pT))) /* ±»ÌÔÌ­µÄʱ¼ä */
		{
			return -1;
		}
		strcpy(str[t].ch,pT); /* °ÑµÚÒ»×éʱ¼äCOPYµ½STRING½á¹¹ÌåÖÐ */
		++t;
		pT = strtok(NULL," ");
	}
	/* Ñ­»·½áÊøºó£¬t×ÜÊDZÈʵ¼Ê³¤¶È´ó1 */
	for(i = 1 ; i <= t - 1 ; ++i)
	{
		char ch[20];
		int ix = 1;
		strcpy(ch,str[i].ch);
		pT = strtok(ch,":");
		while(pT)
		{
			if(1 == ix)
				sscanf(pT,"%d",&pTime->hh);
			else if(2 == ix)
				sscanf(pT,"%d",&pTime->mm);
			else
				sscanf(pT,"%d",&pTime->ss);
				
			pT = strtok(NULL,":");
			++ix;
		}
		res += pTime->hh * 60 * 60 + pTime->mm * 60 + pTime->ss; /* ¼ÆËã³öÕâÒ»×éʱ¼äµÄÃëÊý */
	}
	return res;
}
int main(int argc, char *argv[])
{
	int section;
	double dis;
	while(scanf("%d%lf",§ion,&dis) != EOF)
	{
		int team;
		while(scanf("%3d ",&team) != EOF)
		{
			TIME time;
			STRING str[21];
			int ss,ss_ave;
			memset(&time,0,sizeof(TIME));
			memset(str,0,sizeof(STRING) * 21);
			
			char ch[500]; /* ʱ¼ä´® */
			gets(ch);
			ss = get_time(&time,ch,strlen(ch),str);
			if(ss != -1) /* ʱ¼äºÏ·¨ */
			{
				ss_ave = ((ss / dis) * 10 + 5) / 10; /* ¼ÆËã second/KM £¬ËÄÉáÎåÈë */
				
				
				if(ss_ave % 60 > 9)
					printf("%3d: %d:%d min/km\n",team,ss_ave / 60,ss_ave % 60);
				else
					printf("%3d: %d:0%d min/km\n",team,ss_ave / 60,ss_ave % 60);
			}
			else /* ±»ÌÔÌ­ */
				printf("%3d: -\n",team);
		}
	}
	return 0;
}


转载于:https://www.cnblogs.com/whongfei/archive/2012/10/28/5247027.html

相关文章:

  • 去除系统提示You have new mail in /var/spool/mail/root
  • table-layout:fixed在Safari下的一个BUG
  • 升为领导十大忌 职场百悟大之六
  • 标准日本语 04_004
  • 无密码登录的ssh。
  • oracle数据文件管理
  • Jquery Ajax ashx DataTable 传参 获取参数 C#
  • 在JAVA中线程到底起到什么作用!
  • css固定元素位置(fixed)
  • 解决一个String转为integer的小例子
  • poj 1151 Atlantis(离散+线段树)
  • 表白程序(IT男专用)
  • 对列表自定义去重
  • Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别...
  • 理解Java的代理很有帮助
  • JS 中的深拷贝与浅拷贝
  • docker python 配置
  • IOS评论框不贴底(ios12新bug)
  • Java 23种设计模式 之单例模式 7种实现方式
  • Javascript设计模式学习之Observer(观察者)模式
  • nginx 配置多 域名 + 多 https
  • spark本地环境的搭建到运行第一个spark程序
  • Vue组件定义
  • 反思总结然后整装待发
  • 规范化安全开发 KOA 手脚架
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 离散点最小(凸)包围边界查找
  • 聊聊hikari连接池的leakDetectionThreshold
  • 区块链共识机制优缺点对比都是什么
  • 数据科学 第 3 章 11 字符串处理
  • 正则表达式
  • hi-nginx-1.3.4编译安装
  • ​secrets --- 生成管理密码的安全随机数​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #Linux(帮助手册)
  • #Linux(权限管理)
  • #Z0458. 树的中心2
  • #控制台大学课堂点名问题_课堂随机点名
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (转)可以带来幸福的一本书
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core跨平台微服务学习资源
  • .Net MVC4 上传大文件,并保存表单
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .Net7 环境安装配置
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [1181]linux两台服务器之间传输文件和文件夹
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [AutoSar]BSW_Com02 PDU详解
  • [BZOJ 1040] 骑士
  • [HackMyVM]靶场Boxing
  • [Java算法分析与设计]--线性结构与顺序表(List)的实现应用