之前没有发现这是一本C语言编写得书,但本人还未学习过C语言,只能尝试用java实现书中的代码,在此记录学习这本书的历程。
本人新手菜鸟,能力有限,如果有误或者有改进的地方欢迎指出,谢谢\(▔▽▔)/。
题目:输入一个r行c列(1<=r,c<=10)的网格,黑格用"*"表示,每个摆个都填有一个字母。如果一个摆个的左边相邻位置或者上边相邻位置没有白格(可能是黑格也可能是出了网格边界),则称这个白格是一个起始格。首先把所有起始格按照从上至下、从左至右的顺序编号为1,2,3......,如图所示。接下来要找出所有横向单词(Across)。这些单词必须从一个起始格开始,向右延伸到一个黑格的左边或者整个网格的最有列。最后找出所有竖向单词(Down)。这些单词必须从一个起始格开始,向下延伸到一个黑格的上边或者整个网格的最下行。输入输出样例如图所示。
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
int number1 = input.nextInt();
while(number1 != 0) {
int number2 =input.nextInt();
input.nextLine();
//将字符数组扩大,可以不用考虑超出数组时报错的情况
char [][]answer = new char[number1+2][number2+2];
clean(answer);
int [][]number = new int[number1][number2];
int key = 1;
int count = 1;//次序
int counts = 1;//起始格号数
while(key < number1+1) {
String a = input.nextLine();
for(int n = 0;n < a.length();n++) { //n为number序号、字符串序号,answer序号-1
answer[key][n+1] = a.charAt(n);
if((answer[key][n] == '*' || answer[key][n] == ' '
|| answer[key - 1][n+1] == '*' || answer[key - 1][n+1] == ' ')
&& answer[key][n+1] != '*') {
number[key-1][n] = counts++;
}
}
key++;
}
System.out.println("puzzle #"+ ++count + ":");
System.out.println("Across");
//输出所有横向单词
for(int i = 0;i < number.length;i++) {//换行
for(int n = 0;n < number[i].length;n++) {//输出该行的所有横向单词
if(number[i][n] != 0 && answer[i+1][n+1] != '*') {
System.out.print(" "+number[i][n]+".");
do {
System.out.print(answer[i+1][n+1]);
n++;
}while(n < number[i].length && answer[i+1][n+1] != '*');
System.out.println();
}
}
}
System.out.println("Down");
//输出所有竖向单词
for(int i = 0;i < number.length;i++) {
int a = i; //保存i的值,便于换下一列时仍在同一行
for(int n = 0;n < number[0].length;n++) {
if(n < number[0].length && number[i][n] != 0 && answer[i+1][n+1] != '*') {
System.out.print(" "+number[i][n]+".");
do {//输出该竖向单词
System.out.print(answer[i+1][n+1]);
answer[i+1][n+1] = '*';
i++;
}while(i < number.length && answer[i+1][n+1] != '*');
i = a;
System.out.println();
}
}
}
number1 = input.nextInt();
}
}
//将字符数组初始化
public static void clean(char[][]answer) {
for(int i = 0;i < answer.length;i++) {
for(int n = 0;n < answer[i].length;n++) {
answer[i][n] = ' ';
}
}
}