⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.java

📁 爱因斯坦在20世纪初出的IQ测试题 题目 在一条街上
💻 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 + -