CTSC'94
剔除多余括号
键盘输入一个含有括号的四则运算表达式,可能含有多余的括号,编程整理该表达式,去掉所有多余的括号,原表达式中所有变量和运算符相对位置保持不变,并保持与原表达式等价。
例:输入表达式 应输出表达式
a+(b+c) a+b+c
(a*b)+c/d a*b+c/d
a+b/(c-d) a+b/(c-d)
注意输入a+b时不能输出b+a。
表达式以字符串输入,长度不超过255。输入不要判错。
所有变量为单个小写字母。只是要求去掉所有多余括号,不要求对表达式化简。
CTSC'94
瓷砖
在2N×2N的方格地板上铺放两种方形磁砖表面图案分别为 a 和 b ,一个方格中只可放一块磁砖,每种磁砖各有2N2-1块,加有两个方格内未铺任何磁砖。
若相邻两块磁砖的弧线有共同点,则认为连起来的曲线是连续的。任何一种铺放方案其表面方案表现为若干曲线组成的图形。下图所示为N=2时的一种铺放方案,最长的连续曲线为由#起始和终止的曲线。
对任何一块磁砖,若其上下左右4个方向某一相邻方格内没有磁砖, 则可将该磁砖平移至该方格内。
00100 00100
01000 00010
10001 10001
00010 01000
00100 00100
a b
编程要求:
对任何一种满足上述要求的铺放方案,寻找一种移动磁砖的方法,使得经过若干次移动后,所得其中的一条连续曲线在所有铺放方案中最长。
输入输出要求:
N和初始铺放方案放在一个文本文件中。第一行是一个数字N,其下2N行为一个2N×2N的矩阵,若该矩阵第I行第J列为1,表示该方格处铺有形如 a 的磁砖,为2表示铺有形如 b 的磁砖,为0表示未铺任何磁砖。在上图这种铺放方案下的最长曲线的长度为13,但不一定是长度最长的方案。
N为自然数,1≤N≤30。
要求首先输出所求得的最长曲线的长度(一块磁砖上的一段曲线长度为1),然后将你的移动方案存入一名为Solve.txt的文件。该文件第一行为移动的总步数,其下每一行表示一次移动。每行只含有4个数字“x1 y1 x2 y2”,表示当前棋盘上坐标(x1,y1)处不是空格,坐标(x2,y2)处是空格,且当前步是将在坐标(x1,y1)的磁砖移至空格(x2,y2)处,显然(x1,y1)与(x2,y2)应当是相邻的。
备注:
1、不要求移动次数最少;
2、注意应能处理N值较大的情形;
3、最长曲线可以是封闭的,也可以是不封闭的;
4、若有多条最长曲线只取一条;
5、输入文件不需判错。
CTSC'94
置棋方案
在M×N的主格中任意指定X个格了构成一个棋盘,在任一个这样的棋盘上放置棋子,要求任意两个棋子不得位于同一行或同一列上。在棋盘上放置K 个棋子并满足上述要求的一种方法称为一个方案。
编程要求:
1对给定的一个棋盘,求出该棋盘可放置的最多的棋子数P。
2记Di为该棋盘上放置i个棋子时的方案总数(1≤i≤P),其中经旋转和镜面反射而得的方案记为不同的方案,对每一个i,求出相应的Di。
3程序应能够连续处理多个棋盘,对每一个棋盘,输出P和D1D2…Dp, 只需输出数字,不必输出具体的棋盘方案。
需要程序处理的所有棋盘由一个仅含有数字的文本文件提供,该文件的第一行是两个数字,代表第一个棋盘的M和N,其下N行为一个仅由0、1组成的M×N的矩阵,某一个位置值为1表示相应的格子在这个棋盘上,为0表示相应的格子不在棋盘上; 再下面一行为第二个棋盘的M和N,其下又是一个矩阵,表示第二个棋盘的布局信息;以此类推,M和N均为0是表示所有棋盘已处理完毕,程序可以结束。
在程序连续处理多个棋盘时,注意你的程序中不应该有任何等待输入的语句,以便统计程序处理全部棋盘所有的时间。所有总时间是评分的一个依据。
应注意棋盘是稀疏的,即X<M×N/2。1<M,N<10。
CTSC'94
求最小棋盘
已知一个未知其规模的棋盘中有R个格子,若任意两个格子处于同一行或同一列上,则称这两个格子为互不相容,否则称之为相容的,已知一个棋盘R个格子两两是相容或不相容的全部信息,编程求出一个相应的棋盘,并要求能包含该棋盘的矩形面积最小。
输入输出要求:
格子间是否相容的信息由一个文本文件提供,该文件第一行是一个数字,代表格子总数R,其下R行是一个仅由0、1组成的R×R的矩阵,若该矩阵第I行第I列为1,表示格子I与格子J不相容,否则相容。
输出应显示求得的棋盘和包含该棋盘的最小矩形的长和宽。同时将所求得的棋盘存入一个名为RESULT.TXT的文件中,该文件共有R行,其中第I(1≤I≤R)行是第I个格子的坐标,先是横坐标,后是纵坐标,其间以空格分隔。