递归与递推上机习题

进制转换

源程序名 change.??? (pas,c,cpp) 可执行文件名 change.exe 输入文件名 change.in 输出文件名 change.out

请你编一程序实现两种不同进制之间的数据转换。

输入:

输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。 输出:

输出仅一行,包含一个正整数,表示转换之后的m进制数。

样例: change.in 16 FF 2

change.out 11111111

数的计算(20分) count.pas 问题描述

我们要求找出具有下列性质数的个数(包含输入的自然数n):

先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:

1. 不作任何处理;

2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半; 3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止. 样例: 输入: 6

满足条件的数为 6 (此部分不必输出) 16 26 126 36 136 输出: 6

黑白棋子的移动

源程序名 chessman.???(pas/c/cpp) 可执行文件名 chessman.exe 输入文件名 chessman.in 输出文件名 chessman.out

有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况:

○○○○○●●●●●

移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为:

○●○●○●○●○●

任务:编程打印出移动过程。 样例

chessman.in 7

chessman.out

step 0:ooooooo*******-- step 1:oooooo--******o* step 2:oooooo--******o* step 3:ooooo--*****o*o* step 4:ooooo*****--o*o* step 5:oooo--****o*o*o* step 6:oooo****--o*o*o* step 7:ooo--***o*o*o*o* step 8:ooo*o**--*o*o*o* step 9:o--*o**oo*o*o*o* step 10:o*o*o*--o*o*o*o* step 11:--o*o*o*o*o*o*o*

问题分析

我们先从n=4开始试试看,初始时:

○○○○●●●●

第1步:○○○——●●●○●(—表示空位) 第2步:○○○●○●●——● 第3步:○——●○●●○○● 第4步:○●○●○●——○●

第5步:——○●○●○●○●

如果n=5呢?我们继续尝试,希望看出一些规律,初始时:

○○○○○●●●●● 第1步:○○○○——●●●●○●

第2步:○○○○●●●●——○●

这样,n=5的问题又分解成了n=4的情况,下面只要再做一下n=4的5个步骤就行了。同理,n=6的情况又可以分解成n=5的情况,??,所以,对于一个规模为n的问题,我们很容易地就把它分治成了规模为n-1的相同类型子问题。

数据结构如下:数组c[1..max]用来作为棋子移动的场所,初始时,c[1]~c[n]存放白子(用字符o表示),c[n+1]~c[2n]存放黑子(用字符*表示),c[2n+1],c[2n+2]为空位置(用字符—表示)。最后结果在c[3]~c[2n+2]中。

Hanoi双塔问题

源程序名 hanoi.???(pas/c/cpp) 可执行文件名 hanoi.exe 输入文件名 hanoi.in

输出文件名 hanoi.out

给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有空的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将 这些国盘移到C柱上,在移动过程中可放在B柱上暂存。要求:

(1)每次只能移动一个圆盘;

(2) A、B、C三根细柱上的圆盘都要保持上小下大的顺序;

任务:设An为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An。 【输入】

输入文件hanoi.in为一个正整数n,表示在A柱上放有2n个圆盘。

【输出】

输出文件hanoi.out仅一行,包含一个正整数,为完成上述任务所需的最少移动次数An。

【输入输出样例1】 hanoi.in 1 【输入输出样例2】 hanoi.in 2

【限制】

hanoi.out 6 hanoi.out 2

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4