📄 subject_65165.htm
字号:
<p>
序号:65165 发表者:klink 发表日期:2003-12-16 08:34:16
<br>主题:头一次来啊,照例发个帖子难为大家一下,呵呵
<br>内容:分子式是用来表达分子组成结构的表达式,一般表达形式为A1c1A2c2A3c3... 其中Ai(i=1,2,.......)表示原子或原子团,ci(i=1,2,....)表示原子或原子团Ai重复的次数。当ci=1时,ci必须省略不写,且原子团的括号也不要。例如N的原子量为14,H的原子量为1,C的原子量为12,O的原子量为16,因此(NH4)2CO3的分子量为(14+1*4)*2+16*3=96。试编写程序求出给定的各个分子式所对应的分子量。<BR><BR>输入:文件的内容分为两部分:第一部分描述了各种原子的原子量:第二部分描述了待求分子量的各个分子的分子式。第一部分的第一行只有一个数k,随后的k行第行描述一种原子的原子量,格式为 c p ,其中c为原子的名称,p为该原子的原子量,二者之间用空白字符隔开,注意:原子量可能含小数部分。第二部分的第一行只有一个数m,表明随后的m行每行描述了一种分子的分子式(所给的分子式均为正确的表达式,且不含空白字符)。<BR><BR>输出:每行输出一个分子式及其对应的分子量<BR><BR>示例:<BR><BR> 输入<BR><BR> 6<BR><BR> Cl 35.5<BR><BR> Na 23<BR><BR> N 14<BR><BR> H 1<BR><BR> C 12<BR><BR> O 16<BR><BR> 3<BR><BR> NaCl<BR><BR> CO2<BR><BR> (NH4)2CO3<BR><BR>输出:<BR><BR> NaCl 58.5<BR><BR> CO2 44<BR><BR> (NH4)2CO3 96<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:sunice 回复日期:2003-12-16 12:12:43
<br>内容:程序员考试题??
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:zzjhsj 回复日期:2003-12-16 15:20:12
<br>内容:<BR>map<string,int> items;<BR>int item(const string&s)<BR>{<BR> return items.find(s)->second;<BR>}<BR><BR>int inittable(ifstream&)<BR>{<BR> //不读文件了:)<BR> items.insert(make_pair("H",1));<BR> items.insert(make_pair("O",16));<BR> items.insert(make_pair("C",12));<BR> items.insert(make_pair("Fe",26*2));<BR><BR> return 0;<BR>}<BR><BR>int getnb(const string&p,int&pos)<BR>{<BR> int tpos=pos;<BR> while(pos<p.size() && isdigit(p[pos]))<BR> pos++;<BR><BR> if(pos!=tpos)<BR> {<BR> return strtol(p.substr(tpos,pos-tpos).c_str(),NULL,10);<BR> }<BR> else<BR> return 1;<BR>}<BR><BR>int simplef(const string&p,int&pos)<BR>{<BR> int r=0;<BR> while(pos<p.size())<BR> {<BR> if(p[pos]=='(')<BR> {<BR> r+=simplef(p,++pos);<BR> }<BR> else if(p[pos]==')')<BR> {<BR> return r*getnb(p,++pos);<BR> }<BR> else if(isupper(p[pos]))//第一个字母<BR> {<BR> int tpos=pos++;<BR> if(pos<p.size())<BR> {<BR> if(islower(p[pos]))//第二个小写字母<BR> {<BR> pos++;<BR> r+=getnb(p,pos)*item(p.substr(tpos,2));<BR> }<BR> else<BR> r+=getnb(p,pos)*item(p.substr(tpos,1));<BR> }<BR> else<BR> return r+item(p.substr(tpos,1));<BR> }<BR> }<BR><BR> return r;<BR>}<BR><BR>void main()<BR>{<BR> ifstream f;<BR> inittable(f);<BR><BR> int pos=0;<BR> cout<<simplef("FeFe2(Fe2)2CC2(C2)2(CH3)2(CH2)2",pos)<<"\n";<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -