算法题:POJ 2006 Litmus Test (简单数学&弱酸的电离常数)

Litmus Test

http://poj.org/problem?id=2006

Time Limit: 1000MS

Memory Limit: 30000K

Description

The pH scale measures the concentration of protons (H+) in a solution and, therefore, its acidity or alkalinity. The pH value of a solution is a number between 0 and 14; it is less than 7 if the solution is acidic, greater than 7 if the solution is basic, and 7 if it is neutral.

The formula for calculating pH is

pH = -log10 [H+]

where [H+] is the concentration of protons measured in moles per litre.

To calculate the pH value of an acid, one has to determine the concentration of protons in the solution. When an acid is dissolved in water, an equilibrium is reached and is governed by the equation

Ka = [H+] [acid ions] / [acid]

where Ka is the acidity constant (known for each acid), [acid ions] is the concentration of the acid ions that have dissolved, and [acid] is the concentration of the undissolved acid. Before the acid is added, both [H+] and [acid ions] are assumed to be 0.
For example, the acidity constant of methanoic acid is 1.6 * 10-4. Dissolving one mole of acid molecules results in one mole of H+ and one mole of acid ions. If the initial concentration of the methanoic acid is 0.1 moles/L and x moles of acid are dissolved (per liter), then the final concentration at equilibrium would be 0.1 - x moles/L for the acid and x moles/L for H+ and the acid ions.

Input

The input consists of a number of test cases. Each test case contains 4 numbers on a line: two positive floating-point numbers specifying the acidity constant Ka and the original concentration of the acid (in moles/liter) added to the water, as well as two positive integers m and n indicating that each mole of acid molecules is dissolved into m moles of H+ ions and n moles of acid ions. The floating-point numbers are specified in scientific notation as shown below. The input is terminated with a line containing four zeros.

Output

For each test case, print on a line the pH value of the solution, rounded to 3 decimal places.

Sample Input

1.6e-04 1.0e-01 1 1
1.6e-04 1.0e-01 4 1
1.5e-05 5.0e-02 1 2
0 0 0 0

Sample Output

2.407
2.101
3.216

设酸电离了x mol,则有Ka=(mx*nx)/(c-x),解出x后乘上m就是[H+]([物质]表示该物质的浓度)

完整代码:

/*110ms,192KB*/

#include <cstdio>
#include <cmath>

int main(void)
{
    double ka, acid;
    int m, n;
    while (scanf("%lf%lf%d%d", &ka, &acid, &m, &n), m)
        printf("%.3f\n", -log10((-ka + sqrt(ka * ka + (m << 2) * n * acid 

* ka)) / (n << 1)));
    return 0;
}

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ph...
, and
, is
, of
, The
, ACID特性
ion
litmus test、litmus、litmus官网、litmusrt、litmus paper,以便于您获取更多的相关知识。

时间: 2024-10-02 14:28:35

算法题:POJ 2006 Litmus Test (简单数学&amp;弱酸的电离常数)的相关文章

算法题:逆波兰表达式(数学逆波兰表达式和交并集逆波兰表达式)

一.前言 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示 法也称为中缀表示.每一运算符都置于其运算对象之后,称为后缀表达式,后缀表达式又叫做逆波兰表达式. 它的优势在于只用两种简单操作,入栈和出栈就可以搞定任何普通表达式的运算.其运算方式如下:如果当前 字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表 达式扫描完后,栈里的就是结果. 二.一般算法 将一个普通的中序表达式转换为逆波兰表达式 的一般算法是: (1)首先构

poj 2006 Litmus Test 【即zoj 2351:计算酸的PH】

公式:  pH = -log10 [H+]  PH值根据氢离子浓度求出 ,[这里的 [H+] 浓度是摩尔每升为单位的] Ka = [H+] [acid ions] / [acid]   平衡常数K等于分解的氢离子和酸根离子乘积与未分解的酸分子的比值  输入格式:   Ka :常数   ori :初始酸浓度    m :1摩酸分子完全溶解 分解出氢离子数    n :1摩酸分子完全溶解 分解出氢离子数[注意是完全溶解] [这题需要特别注意的是]指数形式是可以直接输入的.如用scanf 或者 pri

算法题:poj 2541 Binary Witch(KMP水过,逆序转换)

链接: http://poj.org/problem?id=2541 分析与总结: 做这题估算了下复杂度,觉得无论KMP再怎么快,这题暴力也肯定要超时的. 想了很久也没想出个好办法,于是决定暴力之,但是TLE了....于是就放了几天.之后看了下discuss ,这题的正解应该是状态压缩dp,不过目前我还不懂,跪了. 之后百度发现也可以用KMP水过,虽然是因为数据水才过的,不过这种思路很巧妙,值得借鉴! 直接暴力是枚举字符串的后面13个的字母,然后再用KMP匹配,这样的话,就绪要枚举多次,分别是

编码-poj 2058算法题Word Encoding完整代码

问题描述 poj 2058算法题Word Encoding完整代码 题目描述 In any language, certain combinations of letters do not appear (or at least appear so seldom that they can be considered non-existent). For instance, there are no English words containing the three letter combin

经典算法题每日演练——第七题 KMP算法

原文:经典算法题每日演练--第七题 KMP算法       在大学的时候,应该在数据结构里面都看过kmp算法吧,不知道有多少老师对该算法是一笔带过的,至少我们以前是的, 确实kmp算法还是有点饶人的,如果说红黑树是变态级的,那么kmp算法比红黑树还要变态,很抱歉,每次打kmp的时候,输 入法总是提示"看毛片"三个字,嘿嘿,就叫"看毛片算法"吧. 一:BF算法      如果让你写字符串的模式匹配,你可能会很快的写出朴素的bf算法,至少问题是解决了,我想大家很清楚的知

记一道毫无思路的算法题

今天贤内给了我一道很实际的算法题,把我彻底难住了,实在想不出来,于是写此博文以记之. 背景是这样的,现在有一个付款明细的Excel,里面有为哪个发票,哪个公司应付多少钱的明细,明细数据是62条,现在知道我们已经付出的金额为Sum,请问到底哪些发票是已付款的. 这是62条明细数据: 653165.00 356029.11 220896.45 146362.00 1847670.00 3018518.91 1347553.07 145010.74 339784.84 199350.28 120611

求助一道二维数组交换特定元素位置的算法题,谢谢大家!

问题描述 求助一道二维数组交换特定元素位置的算法题,谢谢大家! 刚试验了一下出了新问题- - 比如,一开始是左边的数组,我想"把2个0去掉,然后0上面的2就掉下来了",形成右边的新数组 然后我用了循环遍历,比如只看第二列,我的做法是"从下往上找,遇到0,就和0上面的数字交换",结果成了下面这个样子了- - 我有个改进想法是"还是从下往上找,遇到0之后判断上面的是不是0,如果是0,再继续向上再找,直到不是0,然后把这个数赋值给一开始那个0的位置",

经典算法题每日演练——第十七题 Dijkstra算法

原文:经典算法题每日演练--第十七题 Dijkstra算法         或许在生活中,经常会碰到针对某一个问题,在众多的限制条件下,如何去寻找一个最优解?可能大家想到了很多诸如"线性规划","动态规划" 这些经典策略,当然有的问题我们可以用贪心来寻求整体最优解,在图论中一个典型的贪心法求最优解的例子就莫过于"最短路径"的问题.   一:概序    从下图中我要寻找V0到V3的最短路径,你会发现通往他们的两点路径有很多:V0->V4-&g

时间复杂度-求教一个百度面试的算法题

问题描述 求教一个百度面试的算法题 一个有N个元素的一维数组(A[0],A[1], ..., A[n-1]),设计一个算法求解该数组最大子数组.(要求时间复杂度是O(n)) 解决方案 用动态规划http://www.cnblogs.com/xkfz007/archive/2012/05/17/2506299.html 解决方案二: http://www.ahathinking.com/archives/120.html 解决方案三: 哈,这道题啊,已经遇到好多次了,推荐一个很多人都在练习的网站,