挑战密室
来源:互联网 发布:建筑工程招投标软件 编辑:程序博客网 时间:2024/04/29 05:57
题目:
挑战密室
时间限制: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 <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>using namespace std;char a[55];char b[55];char c[55];int qiu(char b[],int m){ int i; int sum1 = 0,sum; for(i=0; i<m; i++) { //cout<<i<<endl; sum = 0; if(b[i] == 'C' && b[i+1] == 'l') { sum += 35; if(b[i+2] >='0' && b[i+2] <= '9' && i + 2 < m)//怕超出界限 { sum *= (b[i+2] - '0'); i = i + 2; } else { i = i + 1; } } else if(b[i] == 'A' && b[i+1] == 'l') { sum += 27; if(b[i+2] >='0' && b[i+2] <= '9' && i + 2 < m) { sum *= (b[i+2] - '0'); i = i + 2; } else { i = i + 1; } } else if(b[i] == 'C' && b[i+1] == 'a') { sum += 40; if(b[i+2] >='0' && b[i+2] <= '9' && i + 2 < m) { sum *= (b[i+2] - '0'); i = i + 2; } else { i = i + 1; } } else if(b[i] == 'Z' && b[i+1] == 'n') { sum += 65; if(b[i+2] >='0' && b[i+2] <= '9' && i + 2 < m) { sum *= (b[i+2] - '0'); i = i + 2; } else { i = i + 1; } } else if(b[i] == 'N' && b[i+1] == 'a') { sum += 23; if(b[i+2] >='0' && b[i+2] <= '9' && i + 2 < m) { sum *= (b[i+2] - '0'); i = i + 2; } else { i = i + 1; } } else if(b[i] == 'N') { sum += 14; if((b[i+1] >= '0' && b[i+1] <= '9') && i + 1 < m) { sum *= (b[i+1] - '0'); i = i + 1; } } else if(b[i] == 'C') { sum += 12; if((b[i+1] >= '0' && b[i+1] <= '9') && i + 1 < m) { sum *= (b[i+1] - '0'); i = i + 1; } } else if(b[i] == 'O') { sum += 16; if((b[i+1] >= '0' && b[i+1] <= '9') && i + 1 < m) { sum *= (b[i+1] - '0'); i = i + 1; } } else if(b[i] == 'S') { sum += 32; if((b[i+1] >= '0' && b[i+1] <= '9') && i + 1 < m) { sum *= (b[i+1] - '0'); i = i + 1; } } else if(b[i] == 'H') { sum += 2; if((b[i+1] >= '0' && b[i+1] <= '9') && i + 1 < m) { sum *= (b[i+1] - '0'); i = i + 1; } } sum1 += sum; } return sum1;}int main(){ int i,j,k; int t; int cheng; scanf("%d",&t); getchar();//放到这里别放到while里面 while(t--) { cheng = 1; gets(a); int n = strlen(a); k = 0; for(i=0; i<n; i++) { if(a[i] == '=') { for(j=i+1; j<n; j++) { if(a[j] == '+') break; b[k++] = a[j]; } break; } }//把括号和加号里面的字符串截出来 int sum = 0,sum1; int m = k; for(i=0; i<m; i++) { if(b[i] == '(') { sum1 = 0; k = 0; for(j=i+1; j<m; j++) { if(b[j] == ')') break; c[k++] = b[j]; } sum1 = qiu(c,k); j++; if(b[j] >= '0' && b[j] <='9') sum1 *= (b[j] - '0'); sum += sum1; } }//加上括号里面的值 if(b[0] >= '0' && b[0] <= '9') { cheng = b[0] - '0'; i = 1; } else { i = 0; } k = 0;//判断第一个是否为数字 for(; i<m; i++) { if(b[i] == '(') { i++; while(1) { if(b[i] == ')') break; i++; } if(b[i+1] >= '0' && b[i+1] <= '9') i += 1; } else { c[k++] = b[i]; } }//加上括号外面的值 sum += qiu(c,k); sum *= cheng; printf("%04d\n",sum); }}
0 0
- 挑战密室
- A.挑战密室
- 挑战密室(化学方程式)
- nyoj 89 挑战密室
- nyoj 1236 挑战密室
- NYOJ 1236 挑战密室
- NYOJ:挑战密室
- NYOJ_1236_挑战密室
- NYOJ1236 挑战密室
- NYOJ-1236-挑战密室
- 问题 A: 挑战密室
- zzuoj 10406: A.挑战密室
- 挑战密室 nyoj 1236 acm
- NYOJ 题目1236 挑战密室
- nyoj 挑战密室 模拟题
- 河南第八届省赛(挑战密室)
- 省赛模拟 水题 挑战密室
- HNACM(八)-A.挑战密室
- 关闭Eclipse的控制台console自动跳出
- MVC和四大组件的理解
- C++与JAVA中的某些语言风格以及需要注意的地方
- 关于类的声明和定义分离的问题
- ThinkPHP的使用(一)
- 挑战密室
- C++ 友元函数,友元类等
- 析构函数
- C++ 11个注意要点
- 虚函数、继承需要注意的几点
- 派生类的构造函数
- 替代密码理论学习
- 头文件无法打开的情况之一
- eclipse怎么切换SVN的用户