本文主要是介绍nyoj 1236 挑战密室,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目连接
v写了好几天了,每次都感觉写的挺对的但是结果还是有误,郁闷,后来才明白计算机算啊不是人算,里面那个数字老是乘错地方 比如Na2SO4 Na要乘2 O乘4 然而仅管知道但开始写的时候出错,S也会乘4
附上AC代码,写繁琐了些
#include<stdio.h>
#include<string.h>
char str[50];
int main()
{int T,i,len,s,sum,m,n;scanf("%d",&T);while(T--){scanf("%s",str);len=strlen(str);for(i=0;i<len;i++){//先找到'='的位置if(str[i]=='=') {i++;break; }}sum=s=0;if(str[i]>='2'&&str[i]<='9'){//得到化学计量数 n=str[i]-'0';i++;}else n=1;for(;i<len&&str[i]!='+';i++){//得到相对分子质量 if(str[i]=='N'){if(str[i+1]=='a') {m=23; i++;}else m=14;} if(str[i]=='C'){if(str[i+1]=='l') {m=35; i++;}else if(str[i+1]=='a') {m=40;i++;}else m=12;} if(str[i]=='O') m=16;if(str[i]=='S') m=32;if(str[i]=='H') m=2;if(str[i]=='A') {m=27;i++;}if(str[i]=='Z') {m=65;i++;}i++;if(str[i]>'1'&&str[i]<='9') m=(str[i]-'0')*m;else i--;if(str[i]=='('){i++;while(str[i]!=')'){if(str[i]=='N'){if(str[i+1]=='a') {m=23; i++;}else m=14;} if(str[i]=='C'){if(str[i+1]=='l') {m=35; i++;}else if(str[i+1]=='a') {m=40;i++;}else m=12;} if(str[i]=='O') m=16;if(str[i]=='S') m=32;if(str[i]=='H') m=2;if(str[i]=='A') {m=27;i++;}if(str[i]=='Z') {m=65;i++;}i++;if(str[i]>'1'&&str[i]<='9') m=(str[i]-'0')*m;else i--;i++;s=s+m;}m=s;//为了防止括号后还有数字 例Ca2(OH)2 }sum=sum+m;}sum=sum*n;printf("%04d\n",sum); } return 0;
}
这篇关于nyoj 1236 挑战密室的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!