555, 和lijun设计了二天的题目, 居然不小心发给他们后连答案都被泄露了出来, 只好重出... 嗯, 下面是上次的, 现在没用了, 只好放在这上面放放喽!
1. Fibonacci数列
1201年,意大利数学家Fibonacci发现了以他自己的名字命名的数列--- Fibonacci数列。他是在研究兔子的生长、繁殖的规律中发现这一数列的。他用Fn代表n个月后兔子的对数。因为从一对新生的兔子开始,所以,F0=1, F1=1,而后,由Fn=Fn-2+Fn-1递推得到接下来的每一项。现给你任一整数n(1<n<2^31),试判数该数是不是Fibonacci数列中的一项,如是,并给出是其中的第几项.
样例输入:
10
3
4
5
样例输出:
No
Yes 3
No
Yes 4
2. 折纸痕
你喜欢折纸吗?给你一张很大的纸,对折以后再对折,再对折......每次对折都是从右往左折,因此在折了很多次以后,原先的一个大纸会变成一个窄窄的纸条.现在把这个纸条沿着折纸的痕迹打开,每次都只打开"一半",即把每个痕迹做成一个直角,那么从纸的一端沿着和纸面平行的方向看过去,会看到一个美妙的曲线.例如,如果你对折了4次,那么打开以后你将看到如下图1所示的曲线.注意,该曲线是不自交的,虽然有两个转折点重合。给出对折的次数,请编程绘出打开后生成的曲线。
图1 对折4次后形成的曲线
样例输入:
2
4
1
样例输出:
|_
_|
^
_ _
|_|_| |_
_| _|
|_|
^
_|
^
3. 树重建
给出一棵标号树的BFS(广度优先遍历)序列和DFS(深度优先遍历)序列,设计一个程序重新建立这棵树(结点数n<=1000).当某结点被扩展时,它的所有孩子应该按照编号从小到大的顺序访问.例如一棵树的BFS序列为4 3 5 1 2 8 7 6,DFS序列为4 3 1 7 2 6 5 8,则一棵满足条件的树如下图2所示:
图2 一棵满足条件的树
4. 对对碰游戏
对对碰游戏(又有叫夺宝奇兵)相信大家很多人都玩过吧.在这个游戏中,有64个不同的宝石分布 在一个8*8的棋盘里,每一个回合,你能够交换一次任意二个相邻的宝石得到一个新的状态,这时,只要有三个或三个以上相同的宝石连成一横或者一竖,那么这几个宝石即会消去,同时上面的宝石随即下落填充该空间。现在,你的任务就是,分析一个给定的棋局状态,交换一次宝石,然后告诉我有最多能有多少个宝石能够被消去.
假设给定的棋局当中没有出现马上能够消去的情况.棋局的输入包括8行,每行含有8个大写字母,不同的字母表示不同种类的宝石.如以下两例输入:
AABBAABB
AABBAABB
BBAABBAA
BBAABBAA
AABBAABB
AABBAABB
BBAABBAA
BBAABBAA
AABBAABB
BBAABBAA
AABBAABB
BBAABBAA
AABBAABB
BBAABBAA
AABBAABB
BBAABBAA
输出结果分别为:
6
6
5. 超长数字串
给您一个数字串S: 12345678910111213141516171819202122…它是由所有自然数从小到大依次排列起来的。现任意给一个数字串S1(S1的长度不超过200个数字),容易知道它在S串中一定出现无穷多次.试编程求出它第一次出现的位置.如对于串” 81” ,它最先出现在位置27。如” 101” ,其最先出现的位置为10。
输入样例为:
81
101
输出样例为:
27
10
6. 数学家们的游戏
传说生活在XVIII世纪的数学家们喜欢玩下面这个游戏。这个游戏由三个数学家玩。其中一人是游戏庄家。首先,游戏庄家说出某个正整数N。然后他选择两个不同的整数X和Y,范围从1到N并且告诉一个游戏者它们的和,告诉另外一个游戏者它们的乘积。每个游戏者都知道他说的是所选数的和还是乘积。此后游戏者轮流告知庄家他们是否知道他所选的数。首先,被告知数之和的游戏者说出他是否知道那些数,然后被知乘积的游戏者说,等等
如下对话:
庄家:“设N为10。”
此后他选择两个范围从1到10的数,并且告诉游戏者S它们的和,告诉游戏者P它们的乘积。
游戏者S:“我不知道这两个数。”
游戏者P:“我不知道这两个数。”
游戏者S:“我不知道这两个数。”
游戏者P:“我不知道这两个数。”
游戏者S:“噢,现在我知道了,你选了3和6。”
输入给予数N 和M ,分别为数的范围和游戏者说“我不知道这两个数”的次数,请你找出游戏庄家选出的所有可能的数的配对。输出第一行为所有可能的配对数,接下来以任意的次序输出这些配对数。
样例输入
10 4
样例输出
3
2 5
3 6
3 10