A - 组合的输出
排列与组合是常用的数学方法,其中组合就是从 n
个元素中抽出 r 个元素(不分顺序且 r≤n)),我们可以简单地将 n 个元素理解为自然数 1,2,…,n,从中任取 r
个数。
现要求输出所有组合。
例如 n=5,r=3
,所有组合为:
1 2 31 2 41 2 51 3 41 3 51 4 52 3 42 3 52 4 53 4 5
输入格式
输出格式
所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置(宽度为 3
右对齐),所有的组合也按字典顺序。
Sample Input
5 3
Sample Output
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
Sponsor
B - 自然数拆分
对于任意大于 1
的自然数 n,总是可以拆分成若干个小于 n
的自然数之和。
现请你编写程序求出 n
的所有拆分。
输入格式
输入文件共一行,包含一个自然数,即要拆分的自然数 n(1≤n≤20)
。
输出格式
输出文件有若干行,每行包含一个等式,即代表一种可行的拆分(格式与顺序参见样例)。
Sample Input
5
Sample Output
5=1+1+1+1+1
5=1+1+1+2
5=1+1+3
5=1+2+2
5=1+4
5=2+3
C - LETTERS
有一个单人的字母游戏,在一个R行C列的矩阵上进行。矩阵上的每一个点都写着一个大写字母。在游戏开始的时候,玩家的位置在第一行的第一个字母 ,玩家可以向上下左右四个方向移动这个指示物,但是每个字母只可以经过一次(包括刚开始指向的字母)。
这个游戏的目标就是尽可能经过更多的字母。现在请你写一个程序,求出在给定矩阵情况下,最多可以经过多少个不同的字母?Input输入包含多组数据。
每组数据的第一行包含两个整数R和C,代表是一个R行C列的矩阵( 1 <= R, S <= 20)。 接下来的R行每行包含S个字母,每一行代表矩阵中该行的字母情况。Output对于每一组数据,你只需要在一行中输出一个数字n,代表指示物最多可以经过多少个不同的字母。Sample Input
3 6
HFDFFB
AJHGDH
DGAGEH
2 2
AA
AA
Sample Output
6
1
D - 八皇后问题
在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。 Input 无输入。 Output 按给定顺序和格式输出所有八皇后问题的解(见Sample Output)。 Sample Input <br /> Sample Output <br />No. 1<br />1 0 0 0 0 0 0 0 <br />0 0 0 0 0 0 1 0 <br />0 0 0 0 1 0 0 0 <br />0 0 0 0 0 0 0 1 <br />0 1 0 0 0 0 0 0 <br />0 0 0 1 0 0 0 0 <br />0 0 0 0 0 1 0 0 <br />0 0 1 0 0 0 0 0 <br />No. 2<br />1 0 0 0 0 0 0 0 <br />0 0 0 0 0 0 1 0 <br />0 0 0 1 0 0 0 0 <br />0 0 0 0 0 1 0 0 <br />0 0 0 0 0 0 0 1 <br />0 1 0 0 0 0 0 0 <br />0 0 0 0 1 0 0 0 <br />0 0 1 0 0 0 0 0 <br />No. 3<br />1 0 0 0 0 0 0 0 <br />0 0 0 0 0 1 0 0 <br />0 0 0 0 0 0 0 1 <br />0 0 1 0 0 0 0 0 <br />0 0 0 0 0 0 1 0 <br />0 0 0 1 0 0 0 0 <br />0 1 0 0 0 0 0 0 <br />0 0 0 0 1 0 0 0 <br />No. 4<br />1 0 0 0 0 0 0 0 <br />0 0 0 0 1 0 0 0 <br />0 0 0 0 0 0 0 1 <br />0 0 0 0 0 1 0 0 <br />0 0 1 0 0 0 0 0 <br />0 0 0 0 0 0 1 0 <br />0 1 0 0 0 0 0 0 <br />0 0 0 1 0 0 0 0 <br />No. 5<br />0 0 0 0 0 1 0 0 <br />1 0 0 0 0 0 0 0 <br />0 0 0 0 1 0 0 0 <br />0 1 0 0 0 0 0 0 <br />0 0 0 0 0 0 0 1 <br />0 0 1 0 0 0 0 0 <br />0 0 0 0 0 0 1 0 <br />0 0 0 1 0 0 0 0 <br />No. 6<br />0 0 0 1 0 0 0 0 <br />1 0 0 0 0 0 0 0 <br />0 0 0 0 1 0 0 0 <br />0 0 0 0 0 0 0 1 <br />0 1 0 0 0 0 0 0 <br />0 0 0 0 0 0 1 0 <br />0 0 1 0 0 0 0 0 <br />0 0 0 0 0 1 0 0 <br />No. 7<br />0 0 0 0 1 0 0 0 <br />1 0 0 0 0 0 0 0 <br />0 0 0 0 0 0 0 1 <br />0 0 0 1 0 0 0 0 <br />0 1 0 0 0 0 0 0 <br />0 0 0 0 0 0 1 0 <br />0 0 1 0 0 0 0 0 <br />0 0 0 0 0 1 0 0 <br />No. 8<br />0 0 1 0 0 0 0 0 <br />1 0 0 0 0 0 0 0 <br />0 0 0 0 0 0 1 0 <br />0 0 0 0 1 0 0 0 <br />0 0 0 0 0 0 0 1 <br />0 1 0 0 0 0 0 0 <br />0 0 0 1 0 0 0 0 <br />0 0 0 0 0 1 0 0 <br />No. 9<br />0 0 0 0 1 0 0 0 <br />1 0 0 0 0 0 0 0 <br />0 0 0 1 0 0 0 0 <br />0 0 0 0 0 1 0 0 <br />0 0 0 0 0 0 0 1 <br />0 1 0 0 0 0 0 0 <br />0 0 0 0 0 0 1 0 <br />0 0 1 0 0 0 0 0 <br />...以下省略<br /> Hint 此题可使用函数递归调用的方法求解。
E - 八皇后
会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 <br />对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=bb...b,其中b为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。 <br />给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。 <br /> Input 第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1 <= b <= 92) Output 输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。 Sample Input <br />2<br />1<br />92Sample Output <br />15863724<br />84136275
F - 迷宫(一)
一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道。
看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路。
输入格式
第一行输入两个整数 n
和 m,表示这是一个 n×m
的迷宫。
接下来的输入一个 n
行 m
列的迷宫。其中 'S' 表示蒜头君的位置,'*'表示墙,蒜头君无法通过,'.'表示路,蒜头君可以通过'.'移动,'T'表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。
输出格式
输出一个字符串,如果蒜头君可以逃出迷宫输出"yes",否则输出"no"。
数据范围
1≤n,m≤10
。
Sample Input
3 4
S.
...
T
Sample Output
no
Sample Input 2
3 4
S.
….
*T
Sample Output 2
yes
G - 迷宫(二)
蒜头君在你的帮助下终于逃出了迷宫,但是蒜头君并没有沉浸于喜悦之中,而是很快的又陷入了思考,从这个迷宫逃出的最少步数是多少呢?
输入格式
第一行输入两个整数 n
和 m,表示这是一个 n×m
的迷宫。
接下来的输入一个 n
行 m
列的迷宫。其中 'S' 表示蒜头君的位置,'*'表示墙,蒜头君无法通过,'.'表示路,蒜头君可以通过'.'移动,'T'表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。
输出格式
输出整数,表示蒜头君逃出迷宫的最少步数,如果蒜头君无法逃出迷宫输出 −1
。
数据范围
1≤n,m≤10
。
Sample Input
3 4
S.
...
T
Sample Output
-1
Sample Input 2
3 4
S.
….
*T
Sample Output 2
5
H - 迷宫(三)
经过思考蒜头君终于解决了怎么计算一个迷宫的最短路问题,于是蒜头君找到一个新的迷宫图,来验证自己是否真的会计算一个迷宫的最短路。
为了检验自己计算的是否正确,蒜头君特邀你一起来计算。
输入格式
第一行输入两个整数 n
和 m,表示这是一个 n×m
的迷宫。
接下来的输入一个 n
行 m
列的迷宫。其中'@'表示蒜头君的位置,'#'表示墙,蒜头君无法通过,'.'表示路,蒜头君可以通过'.'移动,所有在迷宫最外围的'.'都表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。
输出格式
输出整数,表示蒜头君逃出迷宫的最少步数,如果蒜头君无法逃出迷宫输出 −1
。
数据范围
1≤n,m≤15
。
Sample Input
9 13
#############
#@……….#
#####.#.#.#.#
#………..#
#.#.#.#.#.#.#
#.#…….#.#
#.#.#.#.#.#.#
#………..#
#####.#######
Sample Output
11
Sample Input 2
4 6
#.####
#.#.##
#…@#
######
Sample Output 2
5
I - 红与黑
有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 Input 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下 <br /> 1)‘.’:黑色的瓷砖; <br /> 2)‘#’:白色的瓷砖; <br /> 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 <br />当在一行中读入的是两个零时,表示输入结束。 <br /> Output 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 Sample Input <br />6 9 <br />....#. <br />.....# <br />...... <br />...... <br />...... <br />...... <br />...... <br />#@...# <br />.#..#. <br />0 0Sample Output <br />45
J - 棋盘问题
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
Input
输入含有多组测试数据。
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。
Sample Input
2 1
#.
.#
4 4
…#
..#.
.#..
#…
-1 -1
Sample Output
2
1
K - 取石子游戏
题目描述
原题来自:BeiJing 2009 WC
小 H 和小 Z 正在玩一个取石子游戏。取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游戏。小 H 先进行操作,他想问你他是否有必胜策略,如果有,第一步如何取石子。
输入格式
第一行为石子的堆数 N
。
接下来 N
行,每行一个数 Ai ,表示每堆石子的个数,接下来一行为每次取石子个数的种类数 M
。
接下来 M
行,每行一个数 Bi
,表示每次可以取的石子个数,
输入保证这 M
个数按照递增顺序排列。
输出格式
第一行为 YES 或者 NO,表示小 H 是否有必胜策略。
若结果为 YES,则第二行包含两个数,第一个数表示从哪堆石子取,第二个数表示取多少个石子,若有多种答案,取第一个数最小的答案,若仍有多种答案,取第二个数最小的答案。
样例
| Input | Output |
|---|---|
| 4 |
7 6 9 3 2 1 2 | YES 1 1 |
样例中共有四堆石子,石子个数分别为 7,6,9,3
,每人每次可以从任何一堆石子中取出 1 个或者 2
个石子,小 H 有必胜策略,事实上只要从第一堆石子中取一个石子即可。
数据范围与提示
对于全部数据,N≤10,Ai≤1000,M≤10,Bi≤10
。
L - 马走日
马在中国象棋以日字形规则移动。请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。
Input 第一行为整数T(T < 10),表示测试数据组数。每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0<=x<=n-1,0<=y<=m-1, m < 6, n < 6) Output 每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,0为无法遍历一次。 Sample Input
1
5 4 0 0
Sample Output
32
