📄 main.java
字号:
/**
* 题目
* 在一条街上,有5座房子,喷了五种颜色,每个房子里住着不同国籍的人,每个人喝不同的饮料,抽不同品牌
* 的香烟,养不同的宠物。
*
* 提示
* 1、英国人住红色房子
* 2、瑞典人养狗
* 3、丹麦人喝茶
* 4、绿色房子在白色房子左面
* 5、绿色房子主人喝咖啡
* 6、抽Pall Mall香烟的人养鸟
* 7、黄色房子主人抽Dunhill香烟
* 8、住在中间房子的人喝牛奶
* 9、挪威人住第一间房
* 10、抽Blends香烟的人住在养猫的人隔壁
* 11、养马的人住抽Dunhill香烟的人隔壁
* 12、抽Blue Master的人喝啤酒
* 13、德国人抽Prince香烟
* 14、挪威人住蓝色房子隔壁
* 15、抽Blends香烟的人有一个喝水的邻居
*
* 问题是:谁养鱼?问题补充:他说世界上有98%的人答不出来,你是那2%里面的吗?
*/
public class Main {
final class Color {
public final static int RED = 0; // 红
public final static int GREEN = 1; // 绿
public final static int WHITE = 2; // 白
public final static int YELLOW = 3; // 黄
public final static int BLUE = 4; // 蓝
}
final class Country {
public final static int ENGLISH = 0; // 英国
public final static int SWEDEN = 1; // 瑞典
public final static int DENMARK = 2; // 丹麦
public final static int NORWAY = 3; // 挪威
public final static int GERMANY = 4; // 德国
}
final class Drink {
public final static int TEA = 0; // 茶
public final static int COFFEE = 1; // 咖啡
public final static int MILK = 2; // 牛奶
public final static int BEER = 3; // 啤酒
public final static int WATER = 4; // 水
}
final class Cigaret {
public final static int PALLMALL = 0; // Pall Mall
public final static int DUNHILL = 1; // Dunhill
public final static int BLENDS = 2; // Blends
public final static int BLUEMASTER = 3; // Blue Master
public final static int PRINCE = 4; // Prince
}
final class Pet {
public final static int DOG = 0; // 狗
public final static int BIRD = 1; // 鸟
public final static int CAT = 2; // 猫
public final static int HORSE = 3; // 马
public final static int FISH = 4; // 鱼
}
// 5! = 120 存放0 ~ 4的所有组合
private static int[][] table = new int[120][5];
// word
private static String[][] words = new String[][] {
{ "红", "绿", "白", "黄", "蓝" },
{ "英国", "瑞典", "丹麦", "挪威", "德国" },
{ "茶", "咖啡", "牛奶", "啤酒", "水" },
{ "Pall Mall", "Dunhill", "Blends", "Blue Master", "Prince" },
{ "狗", "鸟", "猫", "马", "鱼" }
};
public static void main(String[] args) {
long start = System.currentTimeMillis();
createTable();
LABEL_COLOR:
for (int color = 0; color < 120; color++) {
// 4、绿色房子在白色房子左面
for (int i = 0; i < 5; i++) {
if (table[color][i] == Color.GREEN) {
if (i + 1 < 5 && table[color][i + 1] == Color.WHITE)
break;
continue LABEL_COLOR;
}
if (table[color][i] == Color.WHITE)
continue LABEL_COLOR;
}
LABEL_COUNTRY:
for (int country = 0; country < 120; country++) {
// 9、挪威人住第一间房
if (table[country][0] != Country.NORWAY)
continue;
// 14、挪威人住蓝色房子隔壁
for (int i = 0; i < 5; i++) {
if (table[color][i] == Color.BLUE) {
if (i - 1 >= 0 && table[country][i - 1] == Country.NORWAY)
break;
if (i + 1 < 5 && table[country][i + 1] == Country.NORWAY)
break;
continue LABEL_COUNTRY;
}
}
// 1、英国人住红色房子
for (int i = 0; i < 5; i++) {
if (table[color][i] == Color.RED) {
if (table[country][i] == Country.ENGLISH)
break;
continue LABEL_COUNTRY;
}
}
LABEL_DRINK:
for (int drink = 0; drink < 120; drink++) {
// 8、住在中间房子的人喝牛奶
if (table[drink][2] != Drink.MILK)
continue;
// 3、丹麦人喝茶
for (int i = 0; i < 5; i++) {
if (table[country][i] == Country.DENMARK) {
if (table[drink][i] == Drink.TEA)
break;
continue LABEL_DRINK;
}
}
// 5、绿色房子主人喝咖啡
for (int i = 0; i < 5; i++) {
if (table[color][i] == Color.GREEN) {
if (table[drink][i] == Drink.COFFEE)
break;
continue LABEL_DRINK;
}
}
LABEL_CIGARET:
for (int cigaret = 0; cigaret < 120; cigaret++) {
// 7、黄色房子主人抽Dunhill香烟
for (int i = 0; i < 5; i++) {
if (table[color][i] == Color.YELLOW) {
if (table[cigaret][i] == Cigaret.DUNHILL)
break;
continue LABEL_CIGARET;
}
}
// 12、抽BlueMaster的人喝啤酒
for (int i = 0; i < 5; i++) {
if (table[drink][i] == Drink.BEER) {
if (table[cigaret][i] == Cigaret.BLUEMASTER)
break;
continue LABEL_CIGARET;
}
}
// 13、德国人抽Prince香烟
for (int i = 0; i < 5; i++) {
if (table[country][i] == Country.GERMANY) {
if (table[cigaret][i] == Cigaret.PRINCE)
break;
continue LABEL_CIGARET;
}
}
// 15、抽Blends香烟的人有一个喝水的邻居
for (int i = 0; i < 5; i++) {
if (table[drink][i] == Drink.WATER) {
if (i - 1 >= 0 && table[cigaret][i - 1] == Cigaret.BLENDS)
break;
if (i + 1 < 5 && table[cigaret][i + 1] == Cigaret.BLENDS)
break;
continue LABEL_CIGARET;
}
}
LABEL_PET:
for (int pet = 0; pet < 120; pet++) {
// 2、瑞典人养狗
for (int i = 0; i < 5; i++) {
if (table[country][i] == Country.SWEDEN) {
if (table[pet][i] == Pet.DOG)
break;
continue LABEL_PET;
}
}
// 6、抽PallMall香烟的人养鸟
for (int i = 0; i < 5; i++) {
if (table[cigaret][i] == Cigaret.PALLMALL) {
if (table[pet][i] == Pet.BIRD)
break;
continue LABEL_PET;
}
}
// 10、抽Blends香烟的人住在养猫的人隔壁
for (int i = 0; i < 5; i++) {
if (table[cigaret][i] == Cigaret.BLENDS) {
if (i - 1 >= 0 && table[pet][i - 1] == Pet.CAT)
break;
if (i + 1 < 5 && table[pet][i + 1] == Pet.CAT)
break;
continue LABEL_PET;
}
}
// 11、养马的人住抽Dunhill香烟的人隔壁
for (int i = 0; i < 5; i++) {
if (table[cigaret][i] == Cigaret.DUNHILL) {
if (i - 1 >= 0 && table[pet][i - 1] == Pet.HORSE)
break;
if (i + 1 < 5 && table[pet][i + 1] == Pet.HORSE)
break;
continue LABEL_PET;
}
}
// 结果显示
System.out.println(" + - - - - - - - - - + - - - - - - - - - +");
for (int i = 0; i < 5; i++) {
System.out.printf("%s\t %s\t %s\t %-12s\t %s\n", words[0][table[color][i]],
words[1][table[country][i]], words[2][table[drink][i]],
words[3][table[cigaret][i]], words[4][table[pet][i]]);
}
}
}
}
}
}
long end = System.currentTimeMillis();
System.out.println("Cost " + (end - start) + " ms");
}
private static void createTable() {
int p = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (j == i) {
continue;
}
for (int k = 0; k < 5; k++) {
if (k == i || k == j) {
continue;
}
for (int m = 0; m < 5; m++) {
if (m == i || m == j || m == k) {
continue;
}
for (int n = 0; n < 5; n++) {
if (n == i || n == j || n == k || n == m) {
continue;
}
table[p][0] = i;
table[p][1] = j;
table[p][2] = k;
table[p][3] = m;
table[p][4] = n;
p++;
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -