挑战密室 nyoj 1236 acm

#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 */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值