挑战密室

1 篇文章 0 订阅

描述

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行,每行为一个化学方程式

输出

对于每个化学方程式输出一行:即密码。

样例输入

3
2C+O2=2CO
2NaOH+H2SO4=Na2SO4+2H2O
Ca2CO3+H2O=Ca2(OH)2+CO2

样例输出

0056
0142
0116

提示

2≤K≤8 ,化学方程式的长度不超过50, 所有原子,分子的数量不超过9.小括号最多一层.

来源

第八届河南省程序设计大赛

AC码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip> 

using namespace std;
int val[10]={14,12,16,35,32,2,27,40,65,23};
char che[10][3]={"N","C","O","Cl","S","H","Al","Ca","Zn","Na"};


int ln(char str[])
{
	for(int i=0;i<10;i++)
	{
		if(strcmp(str,che[i])==0)
		return val[i];//字母相等,返回字母所代表的能量值 
	}
}
int main()
{
	int k;
	scanf("%d",&k);
	char str[500];
	while(k--)
	{
		bool flag=false;//做判断用的(0) 
		int j=0;//记录下标 
		char b[55];//将=号后第一个分子存到b[]数组中 
		memset(str,0,sizeof(str));//初始0化 
		memset(b,0,sizeof(b));//初始0化 
		scanf("%s",str);//输入化学方程式
		for(int i=0;i<strlen(str);i++)
		{
			if(str[i]=='+'&&flag)
			break;//在=之后遇到+号时运行结束
			if(str[i]=='=')
			{//如果遇到=,结束本次循环 
				flag=true;
				continue;
			}
			if(flag)//将=号后第一个分子存到a[]数组中 
			b[j++]=str[i];
		}
		char ch[3];
		int sum=0,head=1,star=0,n;
		if(b[0]>='0'&&b[0]<='9')
		{
			head=b[0]-'0';
			star=1;
		}
		for(int i=star;i<j;i++)
		{
			memset(ch,0,sizeof(ch));
			n=1;//记录离子出现的次数
			if(b[i]=='(')
			{//如果括号在前
				i++;
				int temp=0;
				while(b[i]!=')'&&i<j)
				{
					memset(ch,0,sizeof(ch));
					if((b[i]>='A'&&b[i]<='Z')&&(b[i+1]>='a'&&b[i+1]<='z'))
					{
						if(b[i+2]>='0'&&b[i+2]<='9')
						n=b[i+2]-'0';//n表示化学元素有几个 
						ch[0]=b[i];
						ch[1]=b[i+1];
						ch[2]='\0';
						i++;
						temp+=n*ln(ch);//由两个元素组成的原子质量 
					}
					else if((b[i]>='A'&&b[i]<='Z')&&!(b[i+1]>='a'&&b[i+1]<='z'))
					{
						if(b[i+1]>='0'&&b[i+1]<='9')
						n=b[i+1]-'0';
						ch[0]=b[i];
						ch[1]='\0';
						temp+=n*ln(ch);//由一个元素组成的原子质量
					}
					i++;
				}
				if(b[i+1]>='0'&&b[i+1]<='9')
				n=b[i+1]-'0';//遇到离子有多个数
				sum+=n*temp;//乘与*个数 
			 } 
			 else if((b[i]>='A'&&b[i]<='Z')&&(b[i+1]>='a'&&b[i+1]<='z'))
					{
						if(b[i+2]>='0'&&b[i+2]<='9')
						n=b[i+2]-'0';
						ch[0]=b[i];
						ch[1]=b[i+1];
						ch[2]='\0';
						i++;
						sum+=n*ln(ch);//由两个元素组成的原子质量
					}
					else if((b[i]>='A'&&b[i]<='Z')&&!(b[i+1]>='a'&&b[i+1]<='z'))
					{
						if(b[i+1]>='0'&&b[i+1]<='9')
						n=b[i+1]-'0';
						ch[0]=b[i];
						ch[1]='\0';
						sum+=n*ln(ch);//由一个元素组成的原子质量
					}
		}
		sum*=head;
		cout<<setfill('0')<<setw(4)<<sum<<endl;//输出要求
		/* 留4位,如果不满四位,用0代替 */ 
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaScript密室逃生是一种基于Web技术的益智游戏,玩家需要在虚拟的密室中找到线索,解开谜题,最终逃离密室。以下是一个300字的回答。 在JavaScript密室逃生游戏中,玩家置身于一个虚拟的密室中,被困在其中,唯一的目标就是找到线索和解谜以逃离这个密室。这个游戏中使用了JavaScript编程语言,是基于Web技术实现的。玩家需要通过与密室内的不同元素进行交互,来发现隐藏的线索或者道具。 首先,玩家需要仔细观察密室的各个角落,寻找可疑的地方或物品。这可能包括墙壁上的画,桌子上的文件,甚至是地板上的纸片。在这些隐藏的地方,可能会找到与解谜相关的密码、数字或者提示。这些线索一般会以文本、图像或者其他形式展示出来。 得到线索后,玩家需要运用逻辑推理的能力来解开谜题。这可能需要玩家对密室中一些特殊的物品或者符号进行分析,并将其与之前获得的线索进行关联。例如,一把钥匙可能与某个柜子或门锁匹配,一串数字可能是解开某个密码的关键。 除了逻辑推理,玩家还可能需要运用一些基本的编程知识和技巧。在某些情况下,玩家可能需要修改或者编写一些JavaScript代码来解决难题。例如,通过代码改变某个元素的属性或者触发某个事件以解开机关。 通过不断地观察,探索和尝试,玩家最终可以找到真正的出口,并成功逃离密室。这个过程需要玩家的观察力、逻辑思维、编程能力和耐心。随着游戏的进行,玩家可能会面临越来越复杂的谜题挑战,因此,这个游戏也可以帮助玩家培养解决问题和团队合作的能力。 总之,JavaScript密室逃生是一个富有挑战性和乐趣的益智游戏。通过与虚拟的密室进行互动,玩家可以锻炼自己的观察力、逻辑推理和编程能力,同时也能欣赏到游戏设计师所创造的精心设计。 ### 回答2: JavaScript密室逃生是一个基于Web的逃生游戏,玩家需要运用JavaScript编程知识解决一系列难题,成功逃离密室。 在游戏中,玩家将置身于一个虚拟的密室中,需要寻找线索、解开谜题、找到隐藏的钥匙等,最终打开门离开房间。在这个过程中,玩家需要利用JavaScript编程语言的特性来实现互动和解谜。 首先,玩家需要了解和运用JavaScript的基本语法、变量、运算符和控制流程等。通过编写代码,可以展示隐藏的物品、触发事件,比如按下某个按钮会出现新的线索或打开隐藏的柜子。 其次,玩家可以利用JavaScript的DOM操作来改变网页元素的属性和样式,以便寻找和获取关键的提示信息。例如,通过改变某个元素的位置、隐藏或显示某个按钮等,来揭示隐藏的谜题答案或是寻找钥匙。 此外,玩家还可以利用JavaScript的事件处理器来监听用户的动作和操作,实现互动和触发相应的功能。例如,检测玩家鼠标点击事件,当玩家点击某个按钮或物品时触发相应事件,打开门或解锁某个装置。 总的来说,JavaScript密室逃生是一款结合了编程技巧和解谜元素的游戏。通过熟练运用JavaScript编程语言的各种特性,玩家可以通过解谜和互动的方式最终成功逃离密室。这不仅考验了玩家对JavaScript的熟练程度,还提高了逻辑思维、解决问题的能力。 ### 回答3: JavaScript密室逃生是一种基于JavaScript编程语言的解谜游戏,玩家需要在限定的时间内找到线索、解开谜题,最终逃离密室。 在游戏开始时,玩家将被锁在一个虚拟的密室内,需要通过与密室内的物品、地点进行交互,找到隐藏的线索和道具。玩家可以通过点击鼠标或键盘操作与游戏界面进行互动。 在这个游戏中,玩家需要利用JavaScript编程语言的特点,运用一些常用的方法和函数来解决谜题。例如,通过查看代码、调试程序、修改变量的值等方式来寻找线索,实现游戏中的各种任务。 游戏难度逐渐增加,玩家需要具备一定的编程基础和逻辑思维能力。而且,玩家在游戏中需要灵活运用编程知识,想出各种创新的解决方案,来解开谜题并逃离密室。 JavaScript密室逃生游戏不仅仅是一种娱乐方式,同时也是一种让人们更加熟悉和掌握JavaScript编程语言的途径。通过这个游戏,玩家能够在娱乐的同时提升自己的编程技巧和解决问题的能力。 总之,JavaScript密室逃生是一种结合编程与解谜的创新游戏,具有一定的娱乐性和教育意义,适合有一定编程基础的人群尝试挑战

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值