【 OJ 】 HDOJ1036 从字符数组内scanf [ 33 ]

36 篇文章 0 订阅
2 篇文章 0 订阅

这题被题目意思搞了个半死.....

后来发现意思为接力赛分n段跑,总距离d ,每个队伍t 的跑的时间分2段 总时间就是2个加起来 ,求平均每km的时间 (四舍五入)

突然发现不会用C++从....string里面读取出来h:m:s...一个个读取取出来好烦人....参考了人家c的....尼玛一个sscanf解决了 

AC代码:

# include<iostream>
# include<string>
# include<iomanip>
#pragma warning (disable:4996)
using namespace std;
int main(void) {
	int n;
	double d;
	cin >> n >> d;//输入分n段 总距离d
	int t;//队伍号
	string t1;// 读取跑的时间
	int sum,temp1,temp2,temp3;
	bool isok;
	while (cin >> t) {
		sum = 0;
		isok = true;
		for (int i = 0; i < n; ++i) {
			cin >> t1;
			sscanf(t1.c_str(), "%d:%d:%d", &temp1, &temp2, &temp3);
			if (t1[0] == '-') {//被取消资格
				isok = false;
			}
			else {
				sum += (temp1 * 3600 + temp2 * 60 + temp3);
			}
		}//录入总时间
		if (isok) {
			printf("%3d: %d:%02d min/km", t, (int)(sum / d + 0.5) / 60, (int)(sum / d + 0.5) % 60);//0.5是四舍五入,强转int丢失精度
			cout << endl;//不知道为啥把\n写printf里面出不来...
		}
		else 
			cout <<setw(3)<< t << ": -" << endl;
	}
	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值