题目详情
返回题库题目描述
这个问题需要你写一个程序完成字符识别的任务。
每个完整的字符图案有 20 行,20 位。每个位是“0”或“1”。图 1a 对应着输入文件中的符号图案。
文件 font.in(下载) 包括了27个字符图案的信息,以这样的顺序记录:
_abcdefghijklmnopqrstuvwxyz
其中 _ 表示空格字符。每个完整字符长 20 行。
输入文件包含一个或多个可能损坏的字符图案。一个字符图案可能以这些方式被损坏。
最多有一行被可能被复制了(就接在原来那一行的下面)
最多有一行可能丢失了
有些“0”可能被改成“1”
有些“1”可能被改成“0”
不会有任何一个字符图案既多余了一行并且又丢失了一行。在测试数据的任何一个字符图案中,“0”和“1”的被改变率不超过 30%。
被复制的那一行中,原来的行和多余的行可能都损坏了,而且损坏的部分可能并不相同。
写一个程序,使用 font.in 提供的字体,在输入文件提供的图象中识别出一个或多个的字符序列。
使用提供的字体图象来识别字符的时候,要找出最佳的多余行或遗漏行,使找出的所有“0”和“1”的变化数量最小。在所有可能的多余行中,只按损坏数据最少的那一行计算。你必须确定和输入序列最接近的字符序列(就是损坏数据最少的那一个)。每个测试数据有唯一的最优解。
正确的解答必须使用到输入文件中的所有数据。
输入描述
两个输入文件都以一个整数 N 开始(19 < N < 1200),表示接下去的行数。
N
(位1)(位2)(位3) ... (位20)
(位1)(位2)(位3) ... (位20)
...
每行有20位的宽度。在0和1之间没有空格分开。
文件 font.in 描述字体。它总有 541 行。它在每个测试数据中可能不同。
特别说明:
提交程序打开读取文件font.in的路径必须是:xdata/font.in。
例如:FILE *filex=fopen("xdata/font.in","r");
输出描述
包含一个识别出来的字符串。它的格式是一个单行的 ASCII 文本。输出文件中不应该包含任何分隔符。如果你的程序没有识别出一个特定的字符,就必须在适当的位置输出一个“?”。
提示
注意,上面输出的一行是两个字符:“a”后面还跟着一个空格。(这是按原文译的,其实我也不理解这句话,应该只有一个字符“a”吧——译者注)