古诗填字游戏 第四讲091121B

老师说这个是网易的一道面试题。
填字游戏.java

import java.util.*;

public class 填字游戏 {

public static void main(String[] args) {
String[] poems = "白日依山尽,黄河入海流,欲穷千里目,更上一层楼".split(",");
String rightWords = "";
String[] answers = new String[4];

int rightOption = (int)(Math.random()* 4);

//挖去四个字
for (int i = 0; i < 4; i++) {
rightWords += poems[i].charAt((int)(Math.random()* 5));
}

answers[rightOption] = rightWords;
//生成错误答案
for (int i = 0; i < answers.length; i++) {
if (i == rightOption) continue;
int[] pos = {0,1,2,3};
for (int j = 0; j < 10; j++) {
int x = (int)(Math.random()* 4);
int y = (int)(Math.random()* 4);
int tmp = pos[x];
pos[x] = pos[y];
pos[y] = tmp;
}
//生成一个备选的错误答案
//----------------数字数组转化为文字
String anAnswer = "" + rightWords.charAt(pos[0]) + rightWords.charAt(pos[1]) + rightWords.charAt(pos[2]) + rightWords.charAt(pos[3]);
if (anAnswer.equals(rightWords)) {
i--;
continue;
}
//检测备选答案是否重复
for (int j = 0; j < i; j++) {
if (anAnswer.equals(answers[j])) {
i--;
continue;
}
}
answers[i] = anAnswer;
}

//打印诗文
for (int i = 0; i < poems.length; i++) {
System.out.println(poems[i].replace(rightWords.charAt(i), '?'));
}
//打印选项
for (int i = 0; i < answers.length; i++) {
System.out.print((char)('A' + i) + ". ");
System.out.print(answers[i].charAt(0) + ", ");
System.out.print(answers[i].charAt(1) + ", ");
System.out.print(answers[i].charAt(2) + ", ");
System.out.println(answers[i].charAt(3));
}
System.out.println("请输入您的答案:");
Scanner scanner = new Scanner(System.in);
String userInput = scanner.next();
int u = userInput.charAt(0) - 'A';
if (u==rightOption) {
System.out.println("恭喜您答对了!");
} else {
System.out.println("恭喜您答错了!");
System.out.println("正确答案是" + (char)('A' + rightOption));
}
}
}

输出:
白?依山尽
黄?入海流
欲?千里目
?上一层楼
A. 日, 河, 穷, 更
B. 穷, 日, 更, 河
C. 日, 更, 穷, 河
D. 河, 日, 更, 穷
请输入您的答案:
经典填字游戏:在3*3个方格的方阵要填入数1到N(N>=10)内的某9个数,每个方格填一个整数,使得所有相邻两个方格内的两个整数之和为质数。试求出所有满足这个要求的各种数填法。 //我们可以通过改变N的值来求不同数范围的质数数组,如果超出整型的范围,还需要改变数据类型。 //f[i]来记录数i是否使用过, //T[i]用来记录下一个可以插在数i后面的与其和为质数的数在F[i][]的位置。 //用F[i][j]来存储按数从小到大的顺序得出的与数i和为质数的第j个数, //例如:F[1][2]存储的是与数1的和为质数的第二个数,我们可以通过查询数组F[][]的第一行找出第二个不为0 //值,然后将当前数组单元的列号存储到F[1][2],即F[1][2] = 4。 //算法思想是通过查询二维数组F[][],来确定下一个可以插入数组num[]的未使用过的数,并记录该数位于数组F[][]的位置, //以便回溯时寻找下一个符合要求的数。如果不存在这样的未使用的数,则需要回溯到上一个已插入num[]的数, //寻找下一个可以插在该数后面的未使用过的数进行插入,如果所有的数都已经插入到num[], //如是则打印结果。当所有数都已插入num[],开始 //进行回溯,重复上述操作,寻找其他符合要求的序列。 //这里面有一个关键在于处理位于num数组右下角四个格子的数时,不光需要判断与前一个数i的关系,还需要判断其头顶上的元素之和是否为素数。 //程序有一大段代码是处理i和j的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值