链接:https://www.nowcoder.net/acm/contest/78/H
来源:牛客网
有时候你会抱怨,什么时候才能到终点。
有时候你会迫不及待,怎么颜色还不改变。
滴定管长场的,我们的路长长的。
用心的放入每一滴,终点就在你手心。
今天小星需要去完成一个酸碱滴定实验。,实验室老师要求用 A mol/L 的HCL去测定一瓶NaOH的浓度。首先小星取出了一个锥形瓶,在里面放入的Bml的NaOH,并滴加1-2滴甲基橙,然后用HCL去滴定他 当滴定至恰好变为红色时(可以认为H离子浓度等于OH离子浓度),用了C ml
小星现在需要计算NaOH的浓度是多少?单位(mol/L)
对于浓度采用化学里“四舍六入五成双”方法保留2位小数
规则1 :第三位小数≤4 时舍去
规则2: 第三位小数≥6时进上
规则3: 第三位小数等于5时
3.1首先根据 5后面的数字来定,当5后有数时,舍5入1;
3.2当5后无有效数字时,需要分两种情况来讲:
3.2.1 5前为奇数,舍5入1;
3.2.2 5前为偶数,舍5不进(0是偶数)
例如
9.8249=9.82 规则1
9.82671=9.83 规则2
9.82501=9.83 规则3.1
9.8351 =9.84 规则3.1
9.8350=9.84 规则3.2.1
9.8250=9.82 规则3.2.2
输入描述:
输入第一行一个数T(T<=20)表示数据组数
对于每组数据输入 A,B,C三个3位小数
0.000<a,b,c<50.000
输出描述:
结果“四舍六入五成双”保留2位小数
示例1
输入
3 10.000 10.000 1.825 10.000 10.000 9.835 1.010 21.325 19.823
输出
1.82 9.84 0.94
说明
样例1中计算出的结果为 1.8250000000根据(规则3.2.2) 答案应该为1.82
9.835->9.84(规则3.2.1)
1 #include<bits/stdc++.h> 2 #define ll long long 3 #define INF 0x3f3f3f3f 4 #define eps 1e-6 5 #define Mod 998244353 6 using namespace std; 7 inline double solve(double x) 8 { 9 int a = (int)(x * 10000); 10 double b = x * 10000 - a; 11 int c = a / 10 % 10, d = a / 100 % 10; 12 if (c<5)return ((double)(a / 100)) / 100; 13 else if (c>5)return ((double)(a / 100 + 1)) / 100; 14 else 15 { 16 if (b>eps)return ((double)(a / 100 + 1)) / 100; 17 else 18 { 19 if (d % 2)return ((double)(a / 100 + 1)) / 100; 20 else return ((double)(a / 100)) / 100; 21 } 22 } 23 } 24 int main() 25 { 26 double a, b, c; 27 int t; 28 cin >> t; 29 while (t--) 30 { 31 cin >> a >> b >> c; 32 printf("%.2lf ", solve(a*c / b)); 33 } 34 35 }