nyoj 1236挑战密室 河南省第八届大学生程序设计大赛acm


挑战密室

时间限制:1000 ms  |  内存限制:65535 KB难度:4
描述

R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室。Dr. Kong必须尽快找到解锁密码逃离,否则几分钟之后,WTO密室即将爆炸。

 

Dr. Kong发现密室的墙上写了许多化学方程式中。化学方程式,也称为化学反应方程式,是化学式表示物质化学反应的式子。化学方程式反映的是客观事实。因此书写化学方程式要遵守两个原则:一是必须以客观事实为基础;二是要遵守质量守恒定律。

化学方程式不仅表明了反应物、生成物和反应条件。同时,化学计量数代表了各反应物、生成物物质的量关系,通过相对分子质量或相对原子质量还可以表示各物质之间的质量关系,即各物质之间的质量比。对于气体反应物、生成物,还可以直接通过化学计量数得出体积比。例如:2NaOH+H2SO4=Na2SO4+2H2O

 

经过多次试探、推理,Dr. Kong发现密码是4位数字,就隐藏在化学方程式等号后的第一个分子中,其分子量就可能是密码(若分子量不足4位,前面加0)。

好在Dr. Kong还记得墙上各化学方程式用到的化学元素的原子量如下:

 

N

C

O

Cl

S

H

Al

Ca

Zn

Na

14

12

16

35

32

2

27

40

65

23

 

你能帮Dr. Kong尽快找到密码吗?

输入
第一行: K,表示有K个化学方程式;
接下来有K行,每行为一个化学方程式
输出
对于每个化学方程式输出一行:即密码。
样例输入
32C+O2=2CO2NaOH+H2SO4=Na2SO4+2H2OCa2CO3+H2O=Ca2(OH)2+CO2
样例输出
005601420116

提示
2≤K≤8 ,化学方程式的长度不超过50, 所有原子,分子的数量不超过9.小括号最多一层.
#include<stdio.h>
#include<string.h>
char a[50];
int isd(int i,int len){
int sum=0,t,e,s;
if(a[i]>'1' && a[i]<='9') {e=a[i]-'0';i++;}
else e=1;
for(;a[i]!='+' && i<len;i++){
if(a[i]=='O') s=16;
if(a[i]=='S') s=32;
if(a[i]=='H') s=2;
if(a[i]<='9' && a[i]>'1') s=(a[i]-'0'-1)*s;//s已经加过一次,故减一
if(a[i]=='A') { s=27; i++;}
if(a[i]=='Z') {s=65;i++;}
if(a[i]=='N') {
if(a[i+1]=='a'){s=23;i++;}
else s=14;
}
if(a[i]=='C'){
if(a[i+1]=='l'){s=35;i++;}
else if(a[i+1]=='a'){s=40;i++;}
else s=12;
}
//return s;
if(a[i]=='(') {
s=0;//处理括号问题,与上面的非括号一样,可以用一个调用函数实现节省空间
for(i=i+1;a[i]!=')' && i<len;i++){
if(a[i]=='O') t=16;
if(a[i]=='S') t=32;
if(a[i]=='H') t=2;
if(a[i]<='9' && a[i]>'1') t=(a[i]-'0'-1)*t;//s
if(a[i]=='A') {t=27;i++;}
if(a[i]=='Z') {t=65;i++;}
if(a[i]=='N') {
if(a[i+1]=='a'){t=23;i++;}
else t=14;
}
if(a[i]=='C'){
if(a[i+1]=='l'){t=35;i++;}
else if(a[i+1]=='a'){t=40;i++;}
else t=12;
}
s+=t;
}
}
sum+=s;

}
return sum*e;
}
int main(){
int i,n,len;
scanf("%d",&n);
while(n--&&scanf("%s",&a)){
int q;
len=strlen(a);
for(i=0;i<len;i++){
if(a[i]=='=') {
q=isd(i+1,len);
break;
}
}
printf("%04d\n",q);
}
return 0;
} /*
3
2C+O2=2CO
2NaOH+H2SO4=Na2SO4+2H2O
Ca2CO3+H2O=Ca2(OH)2+CO2 */


智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告