第一题:汉诺塔问题
题目描述
给定三根柱子,初始状态下,最左边上有若干个圆盘,这些圆盘从上到下按从小
到大的顺序排列。任务是将这些圆盘全部移到中间杆上,且必须保持原有顺序不
变。在移动过程中,需要遵守以下规则:
1、 只能从一根柱子的顶部取出圆盘,并将其放入另一根柱子的顶部。
2、 每次只能移动一个圆盘。
3、 小圆盘必须始终在大圆盘之上。
这是一个著名的问题,几乎所有的教材上都有这个问题。由于条件是一次只能移
动一个盘,且不允许大盘放在小盘上面,所以 64个盘的移动次数是:
18,446,744,073,709,551,615这已经是一个天文数字,假定圆盘从小到大编
号为1, 2, ...n(n<20),请你模拟下圆盘的移动过程。
输入格式
输入为一个整数 (n<20)后面跟三个单字符字符串。
整数为盘子的数目,后三个字符表示三个杆子的编号。
输出格式
输出每一步移动盘子的记录。一次移动一行。
每次移动的记录为例如 a->3->c 的形式,即把编号为 3的盘子从 a杆移到b
杆。
样例:
输入数据 #1
2 a b c
输出数据 #1
a->1->c
a->2->b
c->1->b
样例解释
以样例数据为例:三根杆从左到右依次为 a,b,c,目标是从 a杆把盘子移到 b杆,
移动过程中严格遵循题目上述 3条移动规则,移动过程为:第一步将 1号盘从a
移到c(a->1->c),第二步将 2号盘从a移到b(a->2->b),第三步将 1号盘
从c移到b(c->1->b),移动完毕。
第二题:进制转换
题目描述
N 进制数指的是逢 N进一的计数制。例如,人们日常生活中大多使用十进制计
数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合
也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五;本题
中,十一进制到十五进制也是类似的)。
在本题中,我们将给出 N个不同进制的数。你需要分别把它们转换成十进制数。
输入格式
输入的第一行为一个十进制表示的整数 N。接下来 N 行,每行一个整数 K,随
后是一个空格,紧接着是一个 K进制数,表示需要转换的数。保证所有 K 进制
数均由数字和大写字母组成,且不以 0 开头。保证 K 进制数合法。
保证 N≤1000;保证 2≤K≤16。
保证所有 K进制数的位数不超过 9。
输出格式
输出 N行,每一个十进制数,表示对应 K 进制数的十进制数值。
样例:
输入 #1
2
8 1362
16 3F0
输出 #1
754
1008
输入 #2
2
2 11011
10 123456789
输出 #2
27
123456789
说明/提示:
对于任意一个 L 位 K 进制数,
第7次 CCF PTA编程培训师资认证-P试卷-C++