各位游戏程序员,文明盛世价值百万的谜题,是怎么回事?

这道价值百万的谜题是青岛文明盛世网络科技有限公司的一道面试题目,这个公司要开发一个新项目,需要招聘大量的高级程序员,所以就出了这么一道题优中选优,听说年薪百万。只有解出题目的人才有机会面试。我把题目给你粘过来了,看看你有没有这个百万年薪的命吧!

谜题内容:

超能饮料

文明盛世旗下的化工产品实验室一直在研究如何配制能够提高工程师生产效率、保持他们头脑清醒的新型兴奋剂。研究已经分离了一系列化合物,当它们和糖水混合在一起就成为了下一代超能饮料的活性成分。

这些化合物成分类似:任何一种化合物都可经由某一化学反应,成为其它任意一种化合物。实际进行化学反应的成本很低,但使反应发生的设备和催化剂成本相当高 昂。把某一化合物转换为另一化合物时所使用的设备,也都必须单独定制。每件设备都会产生购置费用,并且需要投入某种化合物才能产出另外一种化合物。文明盛 世实验室必须配备足够设备,确保无论市场上能买到哪些化合物,都能产出整个系列的化合物。

编写仅带一个命令行参数的程序。该参数必须是一个包括输入数据的文件名。此程序应该输出最便宜的方案到标准输出,使文明盛世公司能够利用源化合物或多个化 合物生产其饮料(输出详情请参见下文)。我们假设设备目录中提到的所有化学品都是配制饮品的必要原料。我们不保证所有的化学反应都能一步到位,不过我们保 证任何一种化合物都能经由反应,转变为其它任意一种化合物。参与者提交的谜题结果和程序方案都必须遵循下面的输入、输出规范,否则将会被视为不合格。参与 者提交的程序将会在几个数据不同的设备目录上测试。此外,参与者提交的程序运行速度必须很快,能在数分钟内给出正确方案。

输入规范

输入文件中需要包含可用设备列表。文件的每一行都代表一个特定的设备型号。每一行的格式如下:

<machine name> <orig compound> <new compound> <price>(分别对应的中文意思是设备名称、源化合物、新化合物、价格)

设备名称要以字母‘M’开头(不要带引号)后跟一个非零整数。设备的名称可以是‘M1’、‘M2’、‘M13’等。

化合物名称要以字母‘C’开头(不要带引号)后跟一个非零整数。化合物的名称可以是‘C4’、‘C6’、‘C24’等。

价格请用简单的非零整数,请勿使用逗号、句号或单位符号(我们假设所有价格的单位都是美元)。如:‘987334’、‘13948295’等。

请在输入文件的段落之间用空格或制表符隔开。最后一项的行尾可以加入空格(也可以不加)。要确保所提交的程序能够通过数据格式正确的输入文件的运行验证。

输入文件示例:

M1 C1 C2 277317

M2 C2 C1 26247

M3 C1 C3 478726

M4 C3 C1 930382

M5 C2 C3 370287

M6 C3 C2 112344

输出规范

请严格按照以下说明进行输出:参与者的程序必须首先输出购买所需设备的总价(请勿插入逗号、句号或其它任何符号),这个总价请用简单整数表示,结尾另起一行。

然后参与者提交的程序需打印所购买的设备编号,以升序排列并省略标志字符’M’。设备编号之间必须用一个空格隔开。程序应该在最后一个设备编号后另起一行,而不能再加入空格。

输出示例(每行末尾需另起一行)

617317

2 3 6