首页 > 其他 > 详细

第八届河南省省赛 A.挑战密室

时间:2016-01-28 13:43:31      阅读:201      评论:0      收藏:0      [点我收藏+]
挑战密室

时间限制: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还记得墙上各化学方程式用到的化学元素的原子量如下:

  

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

 
输入
第一行: K,表示有K个化学方程式;
接下来有K行,每行为一个化学方程式
输出
对于每个化学方程式输出一行:即密码。
样例输入
3
2C+O2=2CO
2NaOH+H2SO4=Na2SO4+2H2O
Ca2CO3+H2O=Ca2(OH)2+CO2
样例输出
0056
0142
0116
提示
2≤K≤8 ,化学方程式的长度不超过50, 所有原子,分子的数量不超过9.小括号最多一层.
来源
第八届河南省程序设计大赛

   好吧  ,我承认  这个题  确实  没做成功   一直报错   也不知道是为啥.   反正也是醉了   下面先附上  错误的代码   

  1 #include<stdio.h>
  2 #include<algorithm>
  3 #include<string.h>
  4 #include<math.h>
  5 using namespace std ;
  6 int main()
  7 {
  8     double q,l,m,n,t,sum,w,r;
  9     int i,e;
 10     char a[2050];
 11     scanf("%lf",&t);
 12     while(t--)
 13     {
 14         w=m=0;
 15         scanf("%s",a);
 16         l=strlen(a);
 17         for(i=0;i<l;i++)
 18         {
 19             if(a[i-1]===)
 20             {
 21                 break;
 22             }
 23         }
 24         e=i;
 25         for(sum=0;i<l;i++)
 26         {
 27             if(a[i]==+)
 28                 break;
 29             if(a[e]-0>=0&&a[e]-0<=9)
 30             {
 31                 r=q=0;
 32                 while(a[i]-0>=0&&a[i]-0<=9)
 33                 {
 34                     r=r*pow(10,q)+(a[i]-0);
 35                     q++;
 36                     if(!(a[i+1]-0>=0&&a[i+1]-0<=9))
 37                         break;
 38                     i++;
 39                 }
 40                 i++;
 41                 e=-1;
 42             }
 43             q=n=0;
 44             if(!(a[i]-0>=0&&a[i]-0<=9))  //当  这次不是数字     越界的时候 也不是数字哦.
 45             {
 46                 if(a[i]==()
 47                 {
 48                     i++;
 49                     while(a[i]==(||a[i]!=))
 50                     {
 51                         if(a[i]==C&&a[i+1]!=a)
 52                             m+=12;
 53                         else
 54                             if(a[i]==H)
 55                         m+=2;
 56                         else
 57                             if(a[i]==O)
 58                         m+=16;
 59                         else
 60                             if(a[i]==N&&a[i+1]!=a)
 61                         m+=14;
 62                         else
 63                             if(a[i]==C&&a[i+1]==l)
 64                             {
 65                                 m+=35;
 66                                 i++;
 67                             }
 68                         else
 69                             if(a[i]==S)
 70                             m+=32;
 71                         else
 72                             if(a[i]==A&&a[i+1]==l)
 73                             {
 74                                 m+=27;
 75                                 i++;
 76                             }
 77                         else
 78                             if(a[i]==C&&a[i+1]==a)
 79                             {
 80                                 m+=40;
 81                                 i++;
 82                             }
 83                         else
 84                             if(a[i]==Z&&a[i+1]==n)
 85                             {
 86                                 m+=65;
 87                                 i++;
 88                             }
 89                         else
 90                             if(a[i]==N&&a[i+1]==a)
 91                             {
 92                                 m+=23;
 93                                 i++;
 94                             }
 95                             if(a[i]==))
 96                                 i++;
 97                         n=1;
 98                         i++;
 99                     }
100                 }
101                 else
102                 {
103 
104                         if(a[i]==C&&a[i+1]!=a)
105                             m+=12;
106                         else
107                             if(a[i]==H)
108                         m+=2;
109                         else
110                             if(a[i]==O)
111                         m+=16;
112                         else
113                             if(a[i]==N&&a[i+1]!=a)
114                         m+=14;
115                         else
116                             if(a[i]==C&&a[i+1]==l)
117                             {
118                                 m+=35;
119                                 i++;
120                             }
121                         else
122                             if(a[i]==S)
123                             m+=32;
124                         else
125                             if(a[i]==A&&a[i+1]==l)
126                             {
127                                 m+=27;
128                                 i++;
129                             }
130                         else
131                             if(a[i]==C&&a[i+1]==a)
132                             {
133                                 m+=40;
134                                 i++;
135                             }
136                         else
137                             if(a[i]==Z&&a[i+1]==n)
138                             {
139                                 m+=65;
140                                 i++;
141                             }
142                         else
143                             if(a[i]==N&&a[i+1]==a)
144                             {
145                                 m+=23;
146                                 i++;
147                             }
148                         n=1;       ////用于处理    当这个化学元素没有后缀时的情况
149                 }                            
150             }
151             if(a[i+1]-0>=0&&a[i+1]-0<=9)    //有后缀时.
152             {
153                 i++;
154                 n=0;
155                 while(a[i]-0>=0&&a[i]-0<=9)
156                 {
157                     n=n*pow(10,q)+(a[i]-0);
158                     q++;
159                     if(!(a[i+1]-0>=0&&a[i+1]-0<=9))
160                         break;
161                     i++;
162                 }
163             }
164             sum=sum+m*n;
165             m=0;
166         }
167         printf("%04.lf\n",r*sum);
168         r=1;
169     }
170     return 0;
171 }

比较失败     当一道题   有思路但是是在解决不出来的时候    就删掉  优化着  在写一次.

第八届河南省省赛 A.挑战密室

原文:http://www.cnblogs.com/A-FM/p/5165790.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!