谁养猫?

五个人来自不同地方,住不同房子,养不同动物,吸不同牌子香烟,喝不同饮料,喜欢不同食物。根据以下线索确定谁是养猫的人

1,红房子在蓝房子的右边,白房子的左边(不一定紧邻)

2,黄房子的主人来自香港,而且他的房子不在最左边。

3,爱吃比萨饼的人住在爱喝矿泉水的人的隔壁。

4,来自北京的人爱喝茅台,住在来自上海的人的隔壁。

5,吸希尔顿香烟的人住在养马的人?右边隔壁。

6,爱喝啤酒的人也爱吃鸡。

7,绿房子的人养狗。

8,爱吃面条的人住在养蛇的人的隔壁。

9,来自天津的人的邻居(紧邻)一个爱吃牛肉,另一个来自成都。

10,养鱼的人住在最右边的房子里。

11,吸万宝路香烟的人住在吸希尔顿香烟的人和吸555香烟的人的中间(紧邻)

12,红房子的人爱喝茶。

13,爱喝葡萄酒的人住在爱吃豆腐的人的右边隔壁。

14,吸红塔山香烟的人既不住在吸健牌香烟的人的隔壁,也不与来自上海的人相邻。

15,来自上海的人住在左数第二间房子里

16,爱喝矿泉水的人住在最中间的房子里。

17,爱吃面条的人也爱喝葡萄酒。

18,吸555香烟的人比吸希尔顿香烟的人住的靠右。

敲了2hours+,这个时间我都推出来了。。。

4号房的人养猫

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<map>
#include<queue>
#include<stack>
#include<vector>
#include<algorithm>
#include<cstring>
#include<string>
#include<iostream>
#define ms(x,y) memset(x,y,sizeof(x))
const int MAXN=1000+10;
const int INF=1<<30;
using namespace std;
char a[8][6];
char name[][10]={"颜色","食物","地方","饮料","香烟","宠物","房号"};
char Color[][10]={"","红","黄","蓝","绿","白"};
char Food[][10]={"","萨饼","鸡肉","面条","牛肉","豆腐"};
char From[][10]={"","北京","上海","天津","成都","香港"};
char Drink[][10]={"","矿泉水","茅台","啤酒","茶","葡萄酒"};
char Cigar[][10]={"","希尔顿","万宝路","555","红塔山","健牌"};
char Pet[][10]={"","马","蛇","鱼","猫","狗"};
char *ptr;

//假设
/*num   1      2      3      4      5
color   红     黄     蓝     绿     白
food    萨饼   鸡肉   面     牛肉   豆腐
from    北京   上海   天津   成都   香港
drink   矿泉水 茅台   啤酒   茶     葡萄酒
烟      希尔顿 万宝路 555    红塔山 健牌
pet     马     蛇     鱼     猫     狗
*/

bool J1()
{
	int red,blue,white;
	ptr=strchr(a[0], '1');
	red=ptr-a[0];
	ptr=strchr(a[0], '3');
	blue=ptr-a[0];
	ptr=strchr(a[0], '5');
	white=ptr-a[0];
	if(red>blue && red<white) return 1;
	return 0;
}

bool J2()
{
	int yellow;
	ptr=strchr(a[0], '2');
	yellow=ptr-a[0];
	char from=a[2][yellow];
	if(from=='5' && yellow!=0) return 1;
	return 0;
}

bool J3()
{
	int num1,num2;
	ptr=strchr(a[1], '1');
	num1=ptr-a[1];
	ptr=strchr(a[3], '1');
	num2=ptr-a[3];
	if(abs(num2-num1)==1) return 1;
	return 0;
}

bool J4()
{
	int num1,num2;
	char d;
	ptr=strchr(a[2],'1');
	d=a[3][ptr-a[2]];
	num1=ptr-a[2];
	ptr=strchr(a[2],'2');
	num2=ptr-a[2];
	if(d=='2' && abs(num1-num2)==1) return 1;
	return 0;
}

bool J5()
{
	int num1,num2;
	ptr=strchr(a[4],'1');
	num1=ptr-a[4];
	ptr=strchr(a[5],'1');
	num2=ptr-a[5];
	if(num1-num2==1) return 1;
	return 0;
}

bool J6()
{
	char food;
	ptr=strchr(a[3],'3');
	food=a[1][ptr-a[3]];
	if(food=='2') return 1;
	return 0;
}

bool J7()
{
	char pet;
	ptr=strchr(a[0],'4');
	pet=a[5][ptr-a[0]];
	if(pet=='5') return 1;
	return 0;
}

bool J8()
{
	char pet;
	int num1,num2;
	ptr=strchr(a[1],'3');
	num1=ptr-a[1];
	ptr=strchr(a[5],'2');
	num2=ptr-a[5];
	if(abs(num1-num2)==1) return 1;
	return 0;
}

bool J9()
{
	char food,from;
	int num,num1,num2;
	ptr=strchr(a[2],'3');
	num=ptr-a[2];
	int x=num-1;
	int y=num+1;
	if(x<0 || y>=5) return 0;
	if(a[1][x]=='4' && a[2][y]=='4') return 1;
	return 0;
}

bool J10()
{
	int num;
	ptr=strchr(a[5],'3');
	num=ptr-a[5];
	if(num==4) return 1;
	return 0;
}

bool J11()
{
	int num,num1,num2;
	ptr=strchr(a[4],'2');
	num=ptr-a[4];
	ptr=strchr(a[4],'1');
	num1=ptr-a[4];
	ptr=strchr(a[4],'3');
	num2=ptr-a[4];
	if(abs(num-num1)==1 && abs(num2-num)==1) return 1;
	return 0;
}

bool J12()
{
	char drink;
	ptr=strchr(a[0],'1');
	drink=a[3][ptr-a[0]];
	if(drink=='4') return 1;
	return 0;
}

bool J13()
{
	int num1,num2;
	ptr=strchr(a[3],'5');
	num1=ptr-a[3];
	ptr=strchr(a[1],'5');
	num2=ptr-a[1];
	if(num1-num2==1) return 1;
	return 0;
}

bool J14()
{
	int num,num1,num2;
	ptr=strchr(a[4],'4');
	num=ptr-a[4];
	ptr=strchr(a[4],'5');
	num1=ptr-a[4];
	ptr=strchr(a[2],'2');
	num2=ptr-a[2];
	if(abs(num-num1)>1 && abs(num-num2)>1) return 1;
	return 0;
}

bool J15()
{
	int num;
	ptr=strchr(a[2],'2');
	num=ptr-a[2];
	if(num==1) return 1;
	return 0;
}

bool J16()
{
	int num;
	ptr=strchr(a[3],'1');
	num=ptr-a[3];
	if(num==2) return 1;
	return 0;
}

bool J17()
{
	char drink;
	ptr=strchr(a[1],'3');
	drink=a[3][ptr-a[1]];
	if(drink=='5') return 1;
	return 0;
}

bool J18()
{
	int num1,num2;
	ptr=strchr(a[4],'3');
	num1=ptr-a[4];
	ptr=strchr(a[4],'1');
	num2=ptr-a[4];
	if(num1-num2>0) return 1;
	return 0;
}

bool judge()
{
	if(J1() && J2() && J3() && J4() && J5() && J6() && J7() && J8() && J9() && J10() && J11() && J12() && J13() && J14() && J15() && J16() && J17() && J18()) return 1;
	return 0;
}

void dfs(int cnt)
{
	//这里一堆剪枝~(之前不加╮(╯_╰)╭,复杂度=5!^6,等
	//半天没结果出来。。。
	if(cnt==1 && J1()==0) return;
	if(cnt==3 && J2()==0) return;
	if(cnt==3 && J9()==0) return;
	if(cnt==3 && J15()==0) return;
	if(cnt==4 && J3()==0) return;
	if(cnt==4 && J6()==0) return;
	if(cnt==4 && J12()==0) return;
	if(cnt==4 && J13()==0) return;
	if(cnt==4 && J16()==0) return;
	if(cnt==4 && J17()==0) return;
	if(cnt==5 && J11()==0) return;
	if(cnt==5 && J14()==0) return;
	if(cnt==5 && J18()==0) return;
	if(cnt==6){
		if(judge()){
			printf("\n房号:  ");
			for(int i=1; i<=5; i++) printf("%-10d", i);
			printf("\n");
			for(int i=0; i<6; i++){
				printf("%s:  ", name[i]);
				for(int j=0; j<5; j++){
					int k=a[i][j]-'0';
					if(i==0) printf("%-10s", Color[k]);
					if(i==1) printf("%-10s", Food[k]);
					if(i==2) printf("%-10s", From[k]);
					if(i==3) printf("%-10s", Drink[k]);
					if(i==4) printf("%-10s", Cigar[k]);
					if(i==5) printf("%-10s", Pet[k]);
				}
				printf("\n");
			}
			printf("\n");
		}
		return;
	}
	char b[]="12345";
	do
	{
		strcpy(a[cnt], b);
		dfs(cnt+1);
	}while(next_permutation(b,b+5));
}

int main()
{
	//freopen("in.txt","r",stdin);
	dfs(0);
	return 0;
}
时间: 2024-10-03 08:37:36

谁养猫?的相关文章

养猫需要注意什么呢?

养猫需要注意什么呢? 1·家里有藤编的或者真皮沙发布艺沙发,要注意防猫抓咬磨爪子,可以买个猫抓板或者猫爬架给它. 2·如果家里有其他宠物,最好隔着笼子适应几天:没有其他宠物猫猫回来以后也要在房子里关三天,让他熟悉气味和环境 3·吃猫粮用猫砂,吃猫粮权衡下来其实比烧猫鱼拌饭便宜,干净简单.教会他上厕所,买个全封闭的猫厕所,气味会不那么大 4·不放出门的话基本不用洗澡,定期驱虫,疫苗什么的要做全了. 5·如果觉得猫发情又吵又烦,母猫有生理期,公猫会跑出去野,那么就节育吧,KC手术选个正规的医院做.或

养养鱼,种种花,做做菜,生活是很好玩儿的

一直以为汪曾祺最近几年才去世,上网查了一下,才知道这个老头儿97年就已经不在了. 最早读到他的小说是<受戒>,被无忧无虑的江南生活所吸引,觉得很美.其实是先生所构想的世界很美,现实中不存在这样的世界,也许以前存在过,后来又消失了.之后在一本很厚的散文集中读到<跑警报>,写得很有意思,来来回回度过很多遍.这本<百年百篇经典散文>封面画了两颗很大的松果,屡次搬家中无故遗失,我专门到旧书网上淘了一本回来,成为我的常读书之一. <跑警报>写昆明西南联大的生活,最要紧

猫狗收养所

两种方法实现,用两个vector实现,一个为领养的动物(输出),一个为收养的动物(输入):用两个queue实现(都为输入),一个为收养的猫,一个收养的狗,vetor(输出). /***************************************************** * \file CatDogAsylum.cpp * \date 2016/05/09 15:19 * \问题描述: 题目描述 有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养

我想养英短

英短:体形圆胖,四肢粗短发达,被毛短而密,头大脸圆,温柔平静,对人友善,极易饲养.它原是一种体型相当大又结实的蓝猫,过了1970年代,毛色和外型都开始改变.体型越来越小,毛色的种类也变得丰富,所有的改变都朝向优雅的风格. 中文学名 英国短毛猫 拉丁学名 Felinae 1.形态特征 2.生活习性 渐层色英短 适应力 其适应能力很强,不会因为环境的改变而改变.所以,如果你买到了这只猫,不用担心它会因为环境的改变而让你头疼. 性格 英国短毛猫大胆好奇,但非常温柔,不会乱发脾气.更不会乱吵乱叫. 运动

加密猫游戏区块链源码开发

加密猫区块链系统开发咨询 萧然 l58-l2微电44-37同号46 加密猫区块链软件开发,加密猫区块链app开发,加密猫区块链模式开发,加密猫区块链源码开发,加密猫区块链平台开发,加密猫区块链商城开发,加密猫区块链游戏系统开发,加密猫区块链游戏软件开发,加密猫区块链系统模式开发 忽如一夜春风来,遍地都是区块链. head(头部部分)meta http-equiv="Content-Type"content="text/html"; charset=gb2312 (可

区块猫系统开发现成系统上线

区块猫系统开发林生▉l8l加4896微9698电同步▉,区块猫系统app开发,区块猫系统开发简介,区块猫功能系统开发,区块猫系统开发软件,区块猫模式系统开发. 随着互联网云平台技术和市场的发展趋于成熟.稳定和安全,工业领域的数据和通信也逐渐从传统的本地服务器转移到云计算平台,工业流程的数据存储和计算处理也更多地汇聚在云端进行.亚马逊.微软.阿里云和华为等公司都针对工业物联网推出了各自的IIoT云平台,GE.西门子等传统工业巨头也分别推出了工业互联网云平台. 一.华登区块猫玩法介绍: 你可以在猫猫

区块猫系统开发app开发

区块猫系统开发[小清:13//66242//7230](软件开发公司,非平台)区块猫系统app开发,区块猫系统开发简介,区块猫功能系统开发,区块猫系统开发软件,区块猫模式系统开发. 随着互联网云平台技术和市场的发展趋于成熟.稳定和安全,工业领域的数据和通信也逐渐从传统的本地服务器转移到云计算平台,工业流程的数据存储和计算处理也更多地汇聚在云端进行.亚马逊.微软.阿里云和华为等公司都针对工业物联网推出了各自的IIoT云平台,GE.西门子等传统工业巨头也分别推出了工业互联网云平台. 一.华登区块猫玩

推荐一款趣味游戏软件App 分红猫

推荐一款趣味游戏软件App 分红猫 1 介绍   分红猫app是一款手机上养猫咪轻松拿分红赚钱的客户端应用,分红猫软件赚钱模式类似于养宠物升级赚钱,用户通过做任务看广告获得活跃度将猫咪升级,分红猫上猫咪等级越高赚的越多. 2 下载 3功能介绍 分红猫app是一款宠物养成类的赚钱软件. 分红猫官方宣称跟市面上一些分红平台完全不一样,纷红猫的宠物等级达到200级就一定参与全平台收益分红,并且预计保底日收益200起. 在分红猫app上每天看15条广告轻松升一级,若邀请推广升级更快,团长最快85天就能拿

java设计模式--基础思想总结1

看设计模式的相关书籍也有一段时间了,一开始其实是抱着作为java三大框架的基础知识储备来学习的,不过到后来,才发现,在设计模式的一些准则装饰下,java的面向对象威力才真正地体现出来,后面的将会陆续地总结设计模式学习过程中的一些心得体会,这篇作是个人理解设计模式中的一些核心思想的简单总结,但是也是我认为在设计模式中最核心的部分思想了. 一.软件工程的设计尝试 软件工程的一些要求.在软件工程中,最基本的要求便是可重用行以及扩展性,前者要求系统的设计在代码层面可以有良好的组织结构以便公共代码可以一次