华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1269|回复: 2
打印 上一主题 下一主题

虎口脱险(张一飞2000试题)

[复制链接]

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
跳转到指定楼层
楼主
发表于 2018-5-20 13:50:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
佐尔格成功的盗取了资料后,马上通过无线电将其发送给了WREAMC。他刚发送完毕,就不幸被X星的反间谍人员发现并抓获。不过,佐尔格在被抓获前已将资料销毁,因此,X星军方并不知道佐尔格窃取的是什么资料。
佐尔格被X星的反间谍人员关进了羈押室。幸运的是,在被关之前,佐尔格从看守员那儿偷到了房间的钥匙。
X星的锁和钥匙与地球上的有很大的不同:

X星的锁由两部分组成。第一部分叫锁盘,是由30个小洞排列而成(见图一)。 第二部分叫锁孔,椭圆形,刚好可以插进一片钥匙(见图二)。X星的钥匙有5种形态,每种钥匙都是由5个小球连接而成(见图三)。每种钥匙都可以任意旋转,翻转放入锁盘(见图四)。
开锁的钥匙一共有7片。其中,前两种形态的钥匙各有两片,后三种形态的钥匙各一片。要想开锁,就必须将指定的一片钥匙放入锁孔,再将余下的六片钥匙放入锁盘,填满锁盘上的小洞。¬
为了便于研究,我们将7片钥匙编号。1~5号钥匙对应着图三中的5种形态。6号和7号钥匙分别具有形态1和形态2。
根据锁孔的形态,很容易辨认出要将哪片钥匙放入锁孔。但要将余下6片钥匙放入锁盘,就没那么容易了。
佐尔格使用他随身携带的专用微型电脑,编写了一个求解程序,顺利的打开了房门。你也能编写出来吗?


【输入文件】

        输入文件有且仅有一行,即插入锁孔的钥匙的编号。

【输出文件】

        输出文件有且仅有一行。
        如果无法开锁,输出-1。
        否则,根据图四所示的圆圈编号按顺序输出每个圆圈上钥匙的编号。
        输出文件中不同的数字用空格分开。
        如果有多解,你只需输出其中任意一种。

【输入输出样例】

Input.txt

1

Output.txt

2 7 7 2 2 7 7 2 2 3 7 6 3 3 3 3 6 6 4 4 6 6 5 4 4 4 5 5 5 5


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

2

主题

17

帖子

74

积分

注册会员

Rank: 2

积分
74
沙发
发表于 2018-5-20 15:20:58 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int n;
  4. int main(){
  5.     cin >> n;
  6.     switch(n){
  7.         case 1:
  8.             cout << "2 7 7 2 2 7 7 2 2 3 7 6 3 3 3 3 6 6 4 4 6 6 5 4 4 4 5 5 5 5";
  9.             break;
  10.         case 2:
  11.             cout << "1 1 3 7 1 3 3 7 7 1 5 3 7 7 1 6 5 3 6 6 6 4 5 6 4 4 5 4 4 5";
  12.             break;
  13.         case 3:
  14.             cout << "1 1 2 7 1 2 2 7 7 1 2 2 7 7 1 6 6 4 5 6 6 4 4 5 6 4 4 5 5 5";
  15.             break;
  16.         case 4:
  17.             cout << "7 7 7 6 7 7 5 1 6 6 6 5 1 1 1 6 3 5 2 2 1 3 5 2 2 3 5 2 3 3";
  18.             break;
  19.         case 5:
  20.             cout << "7 7 7 1 7 7 2 1 1 1 2 2 3 3 6 1 2 2 3 4 6 6 6 3 4 4 6 3 4 4";
  21.             break;
  22.         case 6:
  23.             cout << "2 7 7 2 2 7 7 2 2 3 7 1 3 3 3 3 1 1 4 4 1 1 5 4 4 4 5 5 5 5";
  24.             break;
  25.         case 7:
  26.             cout << "1 1 3 2 1 3 3 2 2 1 5 3 2 2 1 6 5 3 6 6 6 4 5 6 4 4 5 4 4 5";
  27.             break;
  28.     }
  29.     return 0;
  30. }
复制代码

大概这样,也不知道对不对
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
板凳
 楼主| 发表于 2018-5-20 17:22:07 来自手机 | 只看该作者
这个可能有问题吧 手算的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-2 06:29 , Processed in 0.109030 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表