题目链接: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; }