翻遍全网都没有,所以我自己写了一个
const string chemh[119]= { //元素周期表 "It is EMPTY", "氢","氦","锂","铍","硼","碳","氮","氧","氟","氖", "钠","镁","铝","硅","磷","硫","氯","氩","钾","钙", "钪","钛","钒","铬","锰","铁","钴","镍","铜","锌", "镓","锗","砷","硒","溴","氪","铷","锶","钇","锆", "铌","钼","锝","钌","铑","钯","银","镉","铟","锡", "锑","碲","碘","氙","铯","钡","镧","铈","镨","钕", "钷","钐","铕","钆","铽","镝","钬","铒","铥","镱", "镥","铪","钽","钨","铼","锇","铱","铂","金","汞", "铊","铅","铋","钋","砹","氡","钫","镭","锕","钍", "镤","铀","镎","钚","镅","锔","锫","锎","锿","镄", "钔","锘","铹","","","","","","","", "","RE","RE","","镆","RE","RE","RE"//RE即打不出来或打出“釒” }; const float chemn[119]= { //相对原子质量 0,1,4,7,9,11,12,14,16,19,20,23,24.31,27,28,31,32,35.5,40,39,40, 45,48,51,52,55,56,59,58.69,63.5,65.5,69.72,72.5,75,79,80,84,85.5,87.5,89,91.22, 93,96,98,101,103,106.4,107.9,112.4,114.8,118.7,121.8,127.6,126.9, 131.3,132.9,137.3,138.9,140.1,140.9,144.2,145,150.4,152,157.3,158.9, 162.5,164.9,167.3,168.9,173,175,178.5,180.9,183.8,186.2,190.2,192.2, 195.1,197,200.6,204.4,207.2,209,209,210,222,223,226,227,232,231,238,237, 244,243,247,247,251,252,257,258,259,262,267,270,269,270,270,278,281,281,285, 286,289,289,293,293,294 }; const string chemf[119]= { //元素符号 "It is EMPTY", "H","He","Li","Be","B","C","N","O","F","Ne", "Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca", "Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn", "Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr", "Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn", "Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd", "Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb", "Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg", "Tl","Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th", "Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm", "Md","No","Lr","Rf","Db","Sg","Bh","Hs","Mt","Ds", "Rg","Cn","Nh","Fl","Mc","Lv","Ts","Og" };
顺便送个完整的化学库w
//This file is. #ifndef _CHEMISTRY_H_ #define _CHEMISTRY_H_ #include #include #include #ifndef _FASTOIER_H_ using namespace std; #endif inline int chnum(string); //查询原子序数 inline void chsearch(string); //给定元素符号查询信息 inline float chrmm(string); //计算相对分子质量 inline int chsolve(string); //配平总函数 const string chemh[119]= { //元素周期表 "It is EMPTY", "氢","氦","锂","铍","硼","碳","氮","氧","氟","氖", "钠","镁","铝","硅","磷","硫","氯","氩","钾","钙", "钪","钛","钒","铬","锰","铁","钴","镍","铜","锌", "镓","锗","砷","硒","溴","氪","铷","锶","钇","锆", "铌","钼","锝","钌","铑","钯","银","镉","铟","锡", "锑","碲","碘","氙","铯","钡","镧","铈","镨","钕", "钷","钐","铕","钆","铽","镝","钬","铒","铥","镱", "镥","铪","钽","钨","铼","锇","铱","铂","金","汞", "铊","铅","铋","钋","砹","氡","钫","镭","锕","钍", "镤","铀","镎","钚","镅","锔","锫","锎","锿","镄", "钔","锘","铹","","","","","","","", "","RE","RE","","镆","RE","RE","RE"//RE即打不出来或打出“釒” }; const float chemn[119]= { //相对原子质量 0,1,4,7,9,11,12,14,16,19,20,23,24.31,27,28,31,32,35.5,40,39,40, 45,48,51,52,55,56,59,58.69,63.5,65.5,69.72,72.5,75,79,80,84,85.5,87.5,89,91.22, 93,96,98,101,103,106.4,107.9,112.4,114.8,118.7,121.8,127.6,126.9, 131.3,132.9,137.3,138.9,140.1,140.9,144.2,145,150.4,152,157.3,158.9, 162.5,164.9,167.3,168.9,173,175,178.5,180.9,183.8,186.2,190.2,192.2, 195.1,197,200.6,204.4,207.2,209,209,210,222,223,226,227,232,231,238,237, 244,243,247,247,251,252,257,258,259,262,267,270,269,270,270,278,281,281,285, 286,289,289,293,293,294 }; const string chemf[119]= { //元素符号 "It is EMPTY", "H","He","Li","Be","B","C","N","O","F","Ne", "Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca", "Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn", "Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr", "Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn", "Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd", "Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb", "Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg", "Tl","Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th", "Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm", "Md","No","Lr","Rf","Db","Sg","Bh","Hs","Mt","Ds", "Rg","Cn","Nh","Fl","Mc","Lv","Ts","Og" }; inline int chnum(string ch) { //查询原子序数 for(int i=1; i<=118; ++i) if(chemf[i]==ch) return i; return -1; } inline void chsearch(string ch) { //给定元素符号查询信息 int num=chnum(ch); if(num==-1) { cout<<"No Find."< ='a'&&(n)<='z') #define isbig(n) ((n)>='A'&&(n)<='Z') #define isnumber(n) ((n)>='0'&&(n)<='9') inline float chrmm(string ch) { //计算相对分子质量 //rmm,Relative Molecular Mass,相对分子质量 if(!isbig(ch[0]))return -1; int len=ch.length(),i=0,i2,di; float tot=0; char c[3]="",c2[11]="";//防溢出 while(i 0?x.a:-x.a,q=x.b>0?x.b:-x.b; return (frac) { p,q }; } char s[110]; int fun[55][55]; int Map[27][27];//手动MAP frac M[55][55];//求解矩阵 frac ans[55];//解 int Ans[55];//整数解 int cnt,c1,c2,flag=1,N,K;//cnt数元素,c1数反应物,c2总数 (未知数的数量) char mat[55][55];//存储物质的名称 void print() { printf("%d %dn",N,K); for(int i=1; i<=K; i++) { for(int j=1; j<=N+1; j++) printf("%d ",M[i][j].a); printf("n"); } printf("n"); } inline int getint(int pos) {//读数 pos++; if(s[pos]>='a'&&s[pos]<='z')pos++; if(s[pos]<'0'||s[pos]>'9')return 1;//没数就是1 else { int x=0; while(s[pos]>='0'&&s[pos]<='9')x=x*10+s[pos]-'0',pos++;//读元素后面的数字 return x; } } inline void scan(int l,int r) {//处理物质 c2++; for(int i=0; i<=r-l; i++)mat[c2][i]=s[l+i];//存下元素的名字 if(flag==1)c1++;//统计一下反应物数量 int tmp=1;//tmp是小括号倍数 for(int i=l; i<=r; i++) { if(s[i]==')')tmp=1; if(s[i]=='(') { int j=i+1; while(s[j]!=')')j++;//找这个括号的范围 tmp=getint(j);//读")"右边的数字 } if(s[i]>='A'&&s[i]<='Z') {//发现元素 int x=s[i]-'A'+1,y=0; if(s[i+1]>='a'&&s[i]<='z')//看一眼是一个字母的还是两个的 y=s[i+1]-'a'+1; if(!Map[x][y])Map[x][y]=++cnt;//判重 fun[Map[x][y]][c2]+=flag*getint(i)*tmp;//把这个物质里的这种元素数量放进矩阵里,坐标(map[x][y],c2) } } } inline bool Solve() {//解方程 ans[c2]=1;//令最后一个解为1 for(int i=1; i<=cnt; i++) { for(int j=1; j<=c2; j++) M[i][j]=fun[i][j]; } for(int i=1; i<=cnt; i++) M[i][c2].a=-M[i][c2].a; //高斯消元 N=c2-1,K=cnt; for(int k=1; k<=N; k++) { frac maxm=(frac) { -1,1 }; int maxi; for(int i=k; i<=K; i++) if(maxm1)cout<
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)