解方程求PH值,POJ(2006)

题目链接:http://poj.org/problem?id=2006

解题报告:

题意看了半天,没看懂,再加上化学没学好,更加让我头痛。

假设1L溶解了x摩尔的酸:ka=m*x*nx/ori-x;

得:mnx*x+kax-ka*ori=0;

解方程x=(sqrt(k*k*a*a+4mnka*ori)-ka)/2mn;

溶度为x*m;

PH=log10(x*m);

这里log是e为底的,应该用log((double)10)

#include<stdio.h>
#include<math.h>
#include<iostream>

using namespace std;

int main()
{
    double Ka;   //平衡常数
    double ori;  //原始酸浓度
    int m;       //1摩酸分子 完全溶解 分解出氢离子数
    int n;         //1摩酸分子 完全溶解 分解出酸根离子数
    double H;    //最后计算Ph值的氢离子数

    while(1)
    {
        cin>>Ka;
        cin>>ori;
        cin>>m;
        cin>>n;

        if(Ka==0&&ori==0&&m==0&&n==0)
            break;

        H=(sqrt(Ka*Ka+4*m*n*Ka*ori)-Ka)/(2*n);
        printf("%.3f
",-log10(H));
    }

    return 0;
}
原文地址:https://www.cnblogs.com/TreeDream/p/5388868.html