搜索算法

Problem1皇后问题

题目描述

    在一N*N的棋盘中,摆上N个皇后,使其互不攻击,有多少种摆法(皇后攻击同行同列与同斜行的棋子)

输入

    输入一行,即整数N(N<=10)

输出

    输出一个数,即总方案数

Problem2八数码问题

题目描述

    有一个3*3的方阵,其中有8个数,一个方格为空,可以通过移动方格将初始的方阵移动成其他的方阵

输入

    输入两个3*3的方阵,即为初始状态与目标状态,0代表空的方格

输出

输出最少的步数使初始方阵转换为目标方阵,如果无解则输出‘No Solution’

Problem3拼图

题目描述

   这个拼图游戏要求将一些图形拼成一个正方形,图形的个数从1到5。图形不能旋转,拼的时候不能重叠,拼完后的正方形里面不能有隙。所有给定的图形都要使用。

输入

   输入第一行是一个整数n,表示图形的个数,范围从1到5。接下来有n个部分,每个部分的第一行是2个整数i和j,表示下面的i行j列用来描述一个图形。图形用0和1表示,1表示图形占有这个置,0表示不占有,中间没有空格。图形的长与宽都不超过5。根据图形给出的顺序给每个图形编号,从1开始,至多到5。保证数据无多解情况。

输出

    如果不能拼成一个正方形,就输出“No solution possible”;否则,输出一种拼的方案:一个正方形的数阵,每个位置上的数字是占有这个位置的图形的编号,中间没有空格。

Problem4质数方阵

题目描述

    求一个5*5的方阵,满足如下要求:

    (1)每行每列的数字和为s

    (2)(1,1)上的数字为t

    (3)每个横行竖行斜行所形成的五位数都是质数

    给定s,t求满足要求的方阵数

输入

   输入一行两个数即s,t

输出

   输出第一行为方案数,接下来按序输出所有方案(每个方案件都有一空行)

Problem5埃及分数

题目描述

    在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。

    如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。

    对于一个分数a/b,表示方法有很多种,但是哪种最好呢?

    首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。如:

       19/45=1/3 + 1/12 + 1/180

       19/45=1/3 + 1/15 + 1/45

       19/45=1/3 + 1/18 + 1/30,

       19/45=1/4 + 1/6 + 1/180

       19/45=1/5 + 1/6 + 1/18.

    最好的是最后一种,因为1/18比1/180,1/45,1/30,1/180都大。

    给出a,b(0〈a〈b〈1000),编程计算最好的表达方式。

输入

    输入仅一行,即为N,表示有N组测试数据,每组测试数据为一行包含a,b(0〈a〈b〈1000)。

输出

输出N行,对应每组测试数据,对于每组测试数据输出若干个数,自小到大排列,依次是单位分数的分母。

Problem6字符串变换

题目描述

  已知有两个字串 A$, B$ 及一组字串变换的规则(至多6个规则):

     A1$ -> B1$

     A2$ -> B2$

  规则的含义为:在 A$中的子串 A1$ 可以变换为 B1$、A2$ 可以变换为 B2$ …。

  例如:A$='abcd' B$='xyz'

  变换规则为:

    ‘abc’->‘xu’ ‘ud’->‘y’ ‘y’->‘yz’

  则此时,A$ 可以经过一系列的变换变为 B$,其变换的过程为:

        ‘abcd’->‘xud’->‘xy’->‘xyz’

  共进行了三次变换,使得 A$ 变换为B$。

输入

    输入格式如下:

     A$ B$

   A1$ B1$ \

   A2$ B2$  |-> 变换规则

   ... ... /

 所有字符串长度的上限为 20。

输出

输出最短步数,若在10步(包含 10步)以内能将A$变换为B$,则输出最少的变换步数;否则输出"NO ANSWER!"

Problem7聪明的打字员

题目描述

    阿兰是某机密部门的打字员,她现在接到一个任务:需要在一天之内输入几百个长度固定为6的密码。当然,她希望输入的过程敲击键盘的总次数越少越好。

    不幸的是,出于保密的需要,该部门用于输入密码的键盘是特殊设计的,键盘上没有数字键,而只有以下六个键:Swap0,Swap1,Up, Down, Left, Right,为了说明这6个键的作用,我们先定义录入区的6个位置的编号,从左至右依次为1,2,3,4,5,6。下面列出每个键的作用:

    Swap0:按Swap0,光标位置不变,将光标所在位置的数字与录入区的1号位置的数字(左起第一个数字)交换。如果光标已经处在录入区的1号位置,则按Swap0键之后,录入区的数字不变;

    Swap1:按Swap1,光标位置不变,将光标所在位置的数字与录入区的6号位置的数字(左起第六个数字)交换。如果光标已经处在录入区的6号位置,则按Swap1键之后,录入区的数字不变;

    Up:按Up,光标位置不变,将光标所在位置的数字加1(除非该数字是9)。例如,如果光标所在位置的数字为2,按Up之后,该处的数字变为3;如果该处数字为9,则按Up之后,数字不变,光标位置也不变;

    Down:按Down,光标位置不变,将光标所在位置的数字减1(除非该数字是0),如果该处数字为0,则按Down之后,数字不变,光标位置也不变;

    Left:按Left,光标左移一个位置,如果光标已经在录入区的1号位置(左起第一个位置)上,则光标不动;

    Right:按Right,光标右移一个位置,如果光标已经在录入区的6号位置(左起第六个位置)上,则光标不动。

    当然,为了使这样的键盘发挥作用,每次录入密码之前,录入区总会随机出现一个长度为6的初始密码,而且光标固定出现在1号位置上。当巧妙地使用上述六个特殊键之后,可以得到目标密码,这时光标允许停在任何一个位置。

    现在,阿兰需要你的帮助,编写一个程序,求出录入一个密码需要的最少的击键次数。

输入

    输入一行,含有两个长度为6的数,前者为初始密码,后者为目标密码,两个密码之间用一个空格隔开。

输出

输出仅一行,含有一个正整数,为最少需要的击键次数。

Problem8 01序列

题目描述

    求指定长度满足下列要求的序列的个数:

       (1)全由01组成

       (2)任意一段连续的子串没有连续出现3次(如:010101、001001001就不符合要求)

输入

    输入仅一个数,即序列长度

输出

输出仅一个数,即满足要求的序列总数

Problem9生日蛋糕

题目描述

    要制作一个体积为N*pi的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i < M时,要求Ri > Ri+1且Hi > Hi+1。 由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。 令Q = S*pi 请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。(除Q外,以上所有数据皆为正整数)

输入

    输入两行,第一行为N(N <= 10000),表示待制作的蛋糕的体积为N*pi;第二行为M(M <= 20),表示蛋糕的层数为M。

输出

输出仅一行,是一个正整数S(若无解则S=0)。

posted @ 2011-03-09 10:02  青 蛙  阅读(505)  评论(0编辑  收藏  举报