求教公司一般的笔公司面试逻辑题题类型

有两个村,张村和李村
张村的人星期一三五说谎
李村的人星期二四六说谎
一人问,今天周几?结果两个村的人都回答“前天是我说谎的日子”
问:今天是周几?
回复讨论(解决方案)
不就是星期一嘛!!&&有问题啊
今天是周二,因为周日两村的人都说谎。
除了星期天和星期一之外的任意一天
周一,1,3,5说谎的人会说这句话的只能是周一和周日。
2,4,6说谎的人会说这句话的只能是周一和周二,
他两同一天说这句话,肯定是周一了。
闭眼睛都知道是周一啦。。不过题挺有意思。。
周一,周一李村说真话,周六李村说谎,没错;周一张村说谎话,周六张村说的是真话,符合周一的谎话
周一,代码模拟一下:
public&class&TestWhichweekDay1
public&static&final&int&WEEK=7;
public&static&void&main(String[]&args)
boolean[]&zhang={false,true,false,true,false,true,true};
boolean[]&li&&&={true,false,true,false,true,false,true};
String[]&week={&星期一&,&星期二&,&星期三&,&星期四&,&星期五&,&星期六&,&星期天&};
for(int&i=0;i&WEEK;i++)
if(!zhang[i]&&&&li[i])//假设今天张村人说谎,李村人不说谎.
if(zhang[(i+5)%7]&&&&!li[(i+5)%7])
System.out.println(&今天是&&+week[i]);
if(zhang[i]&&&&!li[i])//假设今天张村人不说谎,李村人说谎.
if(!zhang[(i+5)%7]&&&&li[(i+5)%7])
System.out.println(&今天是&&&+week[i]);
//据题意其他两种情况不存在(同时不说谎,同时说谎)。
}//end&for.
1,2,3,4,5,6
其中一人说谎话。
除了星期日&&&任意一天
除了星期日&和&&星期二&&其他都可以
张村的人星期一三五说谎
李村的人星期二四六说谎
列表如下:
如果今天周一
*******周六&&周七&&周一&
张村&&&&实话&&实话&&谎话&&&&&今天周一,张村说我前天说谎,也就是前天我说的是实话,没问题
李村&&&&谎话&&实话&&实话&&&&&今天周一,李村说我前天说谎,也就是前天我说的是谎话,没问题
如果今天周二
*******周七&&周一&&周二&
张村&&&&实话&&谎话&&实话&&&&&今天周二,张村说我前天说谎,也就是前天我说的是谎话,不成立
李村&&&&实话&&实话&&谎话&&&&&今天周一,李村说我前天说谎,也就是前天我说的是实话,没问题
所以周二不成立,下面的也是一样,不过这道题既然星期天都说实话,我估计应该和星期天肯定有关系,所以我就列举不涉及星期天的了。
星期一,正解
周一,代码模拟一下:
Java&code?53637public&class&TestWhichweekDay1{&&&&public&static&final&int&WEEK=7;&&&&public&static&void&main(String……
面试时这样回答肯定强悍
星期六说谎了,今天是周一。
我看是礼拜2
周一吧&啊啊啊
不过不能说明其它天他们说的一定是真话,,
ls们都假设周日说实话,而题意并没有明确指出。
Boolean[]zhang={false,true,false,true,false,true,null},
li={true,false,true,false,true,false,null};
System.out.println(&今天可能是:&);
for(int&i=0;i&7;i++){
int&qt=i&=2?i-2:5+i;
if(zhang[i]!=null&&li[i]!=null&&zhang[qt]!=null&&li[qt]!=null&&
(zhang[i]&&!zhang[qt]&&!li[i]&&li[qt]
||!zhang[i]&&zhang[qt]&&li[i]&&!li[qt])){
System.out.println(&周&+(i&6?i+1:1));
结果仍然是周一...
int&qt=i&=2?i-2:5+i;&&哇
周一&周一周一
题目有问题。
如果是:三四五六:中的任一天,则说谎话的人肯定说:前天我说真话。两个人都说前天自己说谎的日子,则这几天可以排除。
剩下:一,二,七。
假如今天星期1,前天是6:&今天张说的是谎,李说的是实话。星期六时:张时候实话,李说谎话。&符合逻辑。
假如今天星期2,前天是7:&今天张说的是实,李说的是谎话。星期7时:张时候实话,李说实话。&张说话不符合逻辑。这天排除。
假如今天星期7,前天是5:&今天张说的是实,李说的是实话。星期5时:张时候谎话,李说实话。&李说话不符合逻辑。这天排除。
所以结果为:星期一
&&&&&&&&&&&&&&&&&&&&
ls们都假设周日说实话,而题意并没有明确指出。
Java&code?112Boolean[]zhang={false,true,false,true,false,true,null},&&&&&&&&li={true,false,true,false,true,false,null};System.out.println(&今天可能是:&);fo……
Monday&Monday,题意中任何其他天说真话的假设都不能作为推倒的依据。
周一&&。。。。
周一啊。。。
编程来算就实际了,不过当时LZ面试的时候要求编程还是考逻辑思维啊
经推算,是周一。
编程来算就实际了,不过当时LZ面试的时候要求编程还是考逻辑思维啊
这是个逻辑题
public&static&void&main(String[]&args)&{
int[]&z&=&new&int[]{0&,&1&,&0&,&1&,&0&,&1&,&1};
int[]&l&=&new&int[]{1&,&0&,&1&,&0&,&1&,&0&,&1};
for&(int&i&=&0;&i&&&z.&i++)&{
int&q&=&(i&+&5)&%&7&;
if(&(z[i]&^&z[q])&==&1&&&
(l[i]&^&l[q])&==&1){
System.out.println(&星期:&&+&(i&+&1));
public&static&void&main(String[]&args)&{
int[]&z&=&new&int[]{0&,&1&,&0&,&1&,&0&,&1&,&1};
int[]&l&=&new&int[]{1&,&0&,&1&,&0&,&1&,&0&,&1};
for&(int&i&=&0;&i&&&z.&i++)&{
int&q&=&(i&+&5)&%&7&;&&
if(&((&z[i]&^&z[q])&&&(l[i]&^&l[q])&)&==&1){
System.out.println(&星期:&&+&(i&+&1));
ls的你没有考虑俩人说的“前天是我说谎的日子”本身就是说谎的啊
两人都说了一样的话,&可以断定一人说谎,&一人说真话,所以不可能是礼拜天
而满足条件“前天是我说谎的日子”,而且一人真话,一人假话的
只有礼拜二
这题很纠结啊,是星期一
星期一、星期一
一人问,今天周几?结果两个村的人都回答“前天是我说谎的日子”
&&他们在说谎怎么办
周一,1,3,5说谎的人会说这句话的只能是周一和周日。
2,4,6说谎的人会说这句话的只能是周一和周二,
他两同一天说这句话,肯定是周一了。&
刚又想了下,&确实是周一
周日周一周二都可以吧, 题目没说在村里的“非说谎日”不能说谎啊
周日周一周二都可以吧,题目没说在村里的“非说谎日”不能说谎啊
这哥们亮了&&
本身题目就说得不明确&哈哈
今天是周一
&&应该是周一吧
是周一,但是要写代码吗你们公司?
“张村的人星期一三五说谎”&!=&“张村的人星期二四六日不说谎”
我看前面的代码都有点混乱,我整理一下思路,大家就很清晰了:
1、张村李村的谎话表
2、对条件进行假设,把条件拼装一下【今天张真+前天张假】、【今天张假+前天张真】……具体见下面代码
Boolean[]&zhang&=&{false,&true,&false,&true,&false,&true,&true};&
&&&&&&&&Boolean[]&li&=&{true,&false,&true,&false,&true,&false,&true};
&&&&&&&&System.out.println(&今天可能是:&);
&&&&&&&&for&(int&i&=&0;&i&&&7;&i++)&{
&&&&&&&&&&&&int&qt&=&i&&=&2&?&i&-&2&:&5&+&i;
&&&&&&&&&&&&if&((zhang[i]&&&&!zhang[qt]&&&&&&//&如果张村说的是真话true,那么前天是false
&&&&&&&&&&&&&&&&||&!zhang[i]&&&&zhang[qt])&&&//&如果张村说的是假话false,那么前天是true
&&&&&&&&&&&&&&&&&&&(li[i]&&&&!li[qt]&||&!li[i]&&&&li[qt]))&{&&&//&同理李村&&&&&
&&&&&&&&&&&&&&&&System.out.println(&周&&+&(i&+&1));
&&&&&&&&&&&&}
算了一下确实是星期一
两村回答的话也有可能是假话。。。
不知道你们怎么想的周一,他们说:“前天是我说谎的日子”这句话本身不应该也是谎话吗
不知道你们怎么想的周一,他们说:“前天是我说谎的日子”这句话本身不应该也是谎话吗
明白了,过程列出来就知道了.......
我也来试试
我发现周日不管是撒谎还是说实话,&答案并不会变!
确实是周一
public&class&TestLie&{
&*&@param&args
public&static&void&main(String[]&args)&{
String[]&days&=&{&Monday&,&Tuesday&,&Wednesday&,&Thursday&,&Friday&,&Saturday&,&Sunday&};
Person&zhang3&=&new&Zhang();
Person&li4&=&new&Li();
for&(int&i&=&0;&i&&&7;&i++)&{
System.out.println(&Today&is&&+days[i]);
zhang3.say(i);
li4.say(i);
interface&Person{
void&say(int&day);
class&Zhang&implements&Person{
boolean[]&lieArray&=&{true,false,true,false,true,false,false};
public&void&say(int&day)&{
int&f&=&(day+5)%7;
switch&(day)&{
case&0&://&Monday
case&2&://&Wednesday
case&4&://&Friday
case&6&://&Sunday
//&lie&day
if&(lieArray[f])&{
System.out.println(&&&&&Zhang&:&The&day&before&yesterday&I&not&lay.&);
System.out.println(&&&&&Zhang&:&The&day&before&yesterday&I&lay.&);
case&1&://&Tuesday
case&3&://&Thursday
case&5&://&Saturday
//&not&lie&day
if&(lieArray[f])&{
System.out.println(&&&&&Zhang&:&The&day&before&yesterday&I&lay.&);
System.out.println(&&&&&Zhang&:&The&day&before&yesterday&I&not&lay.&);
throw&new&IllegalArgumentException(&day&=&&+day);
class&Li&implements&Person{
boolean[]&lieArray&=&{false,true,false,true,false,true,false};
public&void&say(int&day)&{
int&f&=&(day+5)%7;
switch&(day)&{
case&1&://&Tuesday
case&3&://&Thursday
case&5&://&Saturday
case&6&://&Sunday
//&lie&day
if&(lieArray[f])&{
System.out.println(&&&&&Li&:&The&day&before&yesterday&I&not&lay.&);
System.out.println(&&&&&Li&:&The&day&before&yesterday&I&lay.&);
case&0&://&Monday
case&2&://&Wednesday
case&4&://&Friday
//&not&lie&day
if&(lieArray[f])&{
System.out.println(&&&&&Li&:&The&day&before&yesterday&I&lay.&);
System.out.println(&&&&&Li&:&The&day&before&yesterday&I&not&lay.&);
throw&new&IllegalArgumentException(&day&=&&+day);
上面的有问题
修改下周日日期
&*&@author&2
public&class&TestLie&{
&*&@param&args
public&static&void&main(String[]&args)&{
String[]&days&=&{&Monday&,&Tuesday&,&Wednesday&,&Thursday&,&Friday&,&Saturday&,&Sunday&};
Person&zhang3&=&new&Zhang();
Person&li4&=&new&Li();
for&(int&i&=&0;&i&&&7;&i++)&{
System.out.println(&Today&is&&+days[i]);
zhang3.say(i);
li4.say(i);
interface&Person{
void&say(int&day);
class&Zhang&implements&Person{
boolean[]&lieArray&=&{true,false,true,false,true,false,true};
public&void&say(int&day)&{
int&f&=&(day+5)%7;
switch&(day)&{
case&0&://&Monday
case&2&://&Wednesday
case&4&://&Friday
case&6&://&Sunday
//&lie&day
if&(lieArray[f])&{
System.out.println(&&&&&Zhang&:&The&day&before&yesterday&I&not&lay.&);
System.out.println(&&&&&Zhang&:&The&day&before&yesterday&I&lay.&);
case&1&://&Tuesday
case&3&://&Thursday
case&5&://&Saturday
//&not&lie&day
if&(lieArray[f])&{
System.out.println(&&&&&Zhang&:&The&day&before&yesterday&I&lay.&);
System.out.println(&&&&&Zhang&:&The&day&before&yesterday&I&not&lay.&);
throw&new&IllegalArgumentException(&day&=&&+day);
class&Li&implements&Person{
boolean[]&lieArray&=&{false,true,false,true,false,true,true};
public&void&say(int&day)&{
int&f&=&(day+5)%7;
switch&(day)&{
case&1&://&Tuesday
case&3&://&Thursday
case&5&://&Saturday
case&6&://&Sunday
//&lie&day
if&(lieArray[f])&{
System.out.println(&&&&&Li&:&The&day&before&yesterday&I&not&lay.&);
System.out.println(&&&&&Li&:&The&day&before&yesterday&I&lay.&);
case&0&://&Monday
case&2&://&Wednesday
case&4&://&Friday
//&not&lie&day
if&(lieArray[f])&{
System.out.println(&&&&&Li&:&The&day&before&yesterday&I&lay.&);
System.out.println(&&&&&Li&:&The&day&before&yesterday&I&not&lay.&);
throw&new&IllegalArgumentException(&day&=&&+day);
恩,看来幸福与是否说谎无关,而与内心相连。
重复逻辑比较多,&我重构下
public&class&TestLie&{
&*&@param&args
public&static&void&main(String[]&args)&{
String[]&days&=&{&Monday&,&&Tuesday&,&&Wednesday&,&&Thursday&,
&Friday&,&&Saturday&,&&Sunday&};
boolean[]&lieArray_zhang&=&{true,&false,&true,&false,&true,&false,&true};
boolean[]&lieArray_li&=&{false,&true,&false,&true,&false,&true,&true};
Person&zhang3&=&new&Person(&zhang3&,&lieArray_zhang);
Person&li4&=&new&Person(&li4&&&&,&lieArray_li);
for&(int&i&=&0;&i&&&7;&i++)&{
System.out.println(&Today&is&&&+&days[i]);
zhang3.say(i);
li4.say(i);
class&Person&{
boolean[]&lieA
public&Person(String&name,&boolean[]&lieArray)&{
this.name&=&
this.lieArray&=&lieA
public&void&say(int&day)&{
int&f&=&(day&+&5)&%&7;
if&(lieArray[day])&{
//&today&is&lie&day
if&(lieArray[f])&{
System.out.println(&&&&&&&+&name
+&&&:&The&day&before&yesterday&I&not&lay.&);
System.out.println(&&&&&&&+&name
+&&&:&The&day&before&yesterday&I&lay.&);
//&today&is&not&lie&day
if&(lieArray[f])&{
System.out.println(&&&&&&&+&name
+&&&:&The&day&before&yesterday&I&lay.&);
System.out.println(&&&&&&&+&name
+&&&:&The&day&before&yesterday&I&not&lay.&);
题目有问题,假定&结果两个村的人都回答“前天是我说谎的日子”&是一句真话,哪就是周一,如果其中有一个村的人说慌了就与其他答案
如果是星期一,前天就是星期六。
星期一张村说谎,他说星期六是他说谎,及真实是星期六他说真话,对的。
星期一李村说实话,他说星期六是他说谎,及真实是星期六她说谎,对的。
import&java.util.ArrayL
import&java.util.L
&*&有两个村,张村和李村
&*&张村的人星期一三五说谎
&*&李村的人星期二四六说谎
&*&一人问,今天周几?结果两个存的人都会打&前天是我说谎的日子&.
public&class&Test10&{
public&static&void&main(String[]&args)&{
//&张村说谎日子
List&Integer&&zhang&=&new&ArrayList&Integer&();
zhang.add(1);
zhang.add(3);
zhang.add(5);
//&李村说谎的日子
List&Integer&&li&=&new&ArrayList&Integer&();
li.add(2);
li.add(4);
li.add(6);
//&张村今天是否是说谎的日子
boolean&lieTodayZhang&=&
//&李村今天是否是说谎的日子
boolean&lieTodayLi&=&
//&张村前天是否是说谎的日子
boolean&lieAnteayerZhang&=&
//&李村前天是否是说谎的日子
boolean&lieAnteayerLi&=&
//&定义一周的for循环
for&(int&today&=&1;&today&&&7;&today++)&{
int&anteayer&=&getAnteayer(today);
//&下面做张村李村今天和昨天能否说谎
lieTodayZhang&=&zhang.contains(today);
lieTodayLi&=&li.contains(today);
lieAnteayerZhang&=&zhang.contains(anteayer);
lieAnteayerLi&=&li.contains(anteayer);
&&&&&&&&&&&&//这里我感觉写的也不好
//lie必须保证在两个村子按照以下判断都成立时才能为true
//如果张村或者李村今天是不能说谎的日子,不用判断就能成立
//这里我是根据记录出来的规律,推倒的先判断张村今天如果不是说谎日,就要保证他前天不能说谎
//判断成立后在判断李村,和上面两行描述一样
boolean&lie&=&
if&(lieTodayZhang&==&false)&{
if&(lieAnteayerZhang&==&true)&{
}&else&if&(lieTodayLi&==&false)&{
if&(lieAnteayerLi&==&true)&{
if&(lie)&{
System.out.println(today);
//&获得对于今天来讲的前天
private&static&int&getAnteayer(int&today)&{
//&这里需要一个循环数组
//&先用一种烂方法代替
if&(today&==&1)&{
}&else&if&(today&==&2)&{
}&else&if&(2&&&today&&&&today&&&8)&{
return&today&-&2;
System.out.println(&程序有问题才会跑这里来&);
return&-1;
感觉if-else那块有点绕
import&java.util.ArrayL
import&java.util.L
&*&有两个村,张村和李村
&*&张村的人星期一三五说谎
&*&李村的人星期二四六说谎
&*&一人问,今天周几?结果两个存的人都会打&前天是我说谎的日子&.
public&class&Test10&{
public&static&voi……
有个地方写错了
}&else&if&(lieTodayLi&==&false)&{
&if&(lieAnteayerLi&==&true)&{
这里要把else去掉&上面
//&定义一周的for循环
for&(int&today&=&1;&today&&&7;&today++)&{
悲剧了,没注意看
day 0 1 2 3 4 5 6
zh T F T F T F T
li T T F T F T F
zhSay? V V X X X X X
liSay? X V V X X X X
zhSay?&zh在这天是否可以说这句话
liSay?&li在这天是否可以说这句话
day 0 1 2 3 4 5 6
zh T F T F T F T
li T T F T F T F
zhSay? V V X X X X X
liSay? X V V X X X X
day&&& 0 1 2 3 4 5 6
zh&&& T F T F T F T
li&&&& T T F T F T F
zhSay? V V X X X X X
liSay? X V V X X X X
这题分析适合穷举假设法
#include&&iostream&
using&namespace&&
有两个村,张村和李村
张村的人星期一三五说谎
李村的人星期二四六说谎
一人问,今天周几?结果两个村的人都回答“前天是我说谎的日子”
问:今天是周几?&
//A&表示张村&B表示李村&,返回0表示说谎,返回1表示说实话
int&FindA(int&nWeek)
if(nWeek&==&1&||&nWeek&==&3||&nWeek&==&5)
int&FindB(int&nWeek)
if(nWeek&==&2&||&nWeek&==&4||&nWeek&==&6)
int&main()
for(int&i&=&1;i&8;i++)
int&j=i-2;
if((FindA(i)!=FindA(j))&&&&(FindB(i)!=FindB(j)))
&&cout&&&今天星期&&&i&&
getchar();
此题的重点是
今天说谎&二天前说实话
今天说实话&二天前说话
代码的话就是今天和二天前不能同时说谎,不能同时说实话
核对一下身份就行了
#&-*-&coding:&utf-8&-*-
z=[False,True,False,True,False,True,None]&#张村
l=[True,False,True,False,True,False,None]&#李村
for&d&in&range(7):
if&((z[(d-2)%7]&or&l[(d-2)%7])==True)&and&(z[(d-2)%7]&&z[d%7]&and&l[(d-2)%7]&&l[d%7]):
print&&今天是星期&%s&&%&str(d+1)
菜鸟用python,算出是周一或周日。我算周日两村有可能都讲真话,或者都假话,或者一真一假。
为什么是星期一?&&前天是我说谎的日子&一奇一偶&怎么可能在一天呢&&我擦&求解
这个题列个表就出来了,然后用假设法排除不满足条件的日子,最后只有周一是合理的
“前天是我说谎的日子”
这句话张村只有周日,周一的时候成立
李村只有周一,周二的时候成立
所以答案是周一
星期一啦。
首先:对于星期天来说,题目并没有设定值。所以,星期天以及星期天的后天星期二,都是不可能的。因此。星期天与星期二排除在外了。
其次:星期一到六,不可能存在同时说谎或同时讲真话的一天。
终上所述,假设结论正确,唯一可求解只有一真一假的情况。所以今天只有在数列{1,3,4,5,6}里。
张说谎{1,3,5}&李说谎{2,4,6}.
1.假定张说谎,李说真话。那么{1,3,5}都是可能的。结合,前天说谎的条件。张只在星期一说谎了。
而李在星期一说实话,星期六他确实在说谎。故张假李真条件同时成立。故星期一是原题的解。
2.假定李说谎,张说真话。那么{4,6}都是可能的。结合,前天说谎的条件。张在星期四以及星期六的前天均没有说谎,故此时无解。
统计1与2.得出。星期一是正解!
但是道理说的有点绕口:&&
张在星期一说星期六说谎,因为星期六他并没有说谎,在星期一,他又必须说谎,所以他只能说前天是我说谎的日子。
而李在星期一说星期六说谎,他星期六确实说谎了,在星期一他不能说谎,他只能说出真相,他星期六那天说谎了。于是出现了,两个人说一样的话。此题,不是一奇一偶的问题,要知道此处1-2是等于6的
星期二,只有在星期天的时候&两个村的说谎才是&true.
有两个村,张村和李村
张村的人星期一三五说谎
李村的人星期二四六说谎
一人问,今天周几?结果两个村的人都回答“前天是我说谎的日子”
问:今天是周几?
根据题意,我们确定的是张村1&3&5&说谎,李村2&4&6说谎,&其他日子有可能说谎,有可能不说谎,
我的代码如下
int&main(int&argc,&char&**&argv)
/*0代表说谎,1是不确定*/
int&z[7][1]&=&{1,&0,&1,&0,&1,&0,&1};
int&l[7][1]&=&{1,&1,&0,&1,&0,&1,&0};
/*0&星期天*/
for&(int&i&=&0;&i&&&7;&i++)&{
if&(!z[i][0])&{&/*确定张村会说谎*/
if&(z[i&&&2&?&i&+&5&:&i&-&2][0])
if&(!l[i][0])&{
if&(l[i&&&2&?&i&+&5&:&i&-&2][0])
printf(&1today&may&be&%d\n&,&i);
printf(&2today&may&be&%d\n&,&i);
}&else&if&(!l[i][0])&{/*确定李村会说谎*/
if&(l[i&&&2&?&i&+&5&:&i&-&2][0])
if&(!z[i][0])&{
if&(z[i&&&2&?&i&+&5&:&i&-&2][0])
printf(&3today&is&%d&,&i);
printf(&4today&may&be&%d\n&,&i);
}&else&/*都不确定*/
printf(&5today&may&be&%d\n&,&i);
今天可能是&星期日,星期一,星期二
只有星期一!
周一。。。代码上面有了。此处省略。
学习了,题有意思!
除星期天和星期二不行,其他任意一天都可以。
排除法:今天肯定不是1,3,4,5,6;因为这些天说谎的人,不会说自己前天也说谎。而周2不说谎的人不会说自己周日说谎。所以今天是周日
&&&星期一&---&&&星期日
li:负&正&负&正&负&正&正
zh:正&负&正&负&正&负&正
简单分析,两个村的人都回答“前天是我说谎的日子”,无论谁为真,谁为假,结果都必须是负,唯一可能出现的情况就围绕着周日这天来算,简单分析,只有周一有可能
人工推算得出是星期一
然后,&看了贴,&里边有高手编程实现,&
但我没看懂
&(day+5)%7;
if(zhang[(i+5)%7]&&&&!li[(i+5)%7])
这什么意思?
有人有同样的问题吗?&请高手答一下
有两个村,张村和李村
张村的人星期一三五说谎
李村的人星期二四六说谎
一人问,今天周几?结果两个村的人都回答“前天是我说谎的日子”
小学水平解题
一&二&三&四&五&六&七
谎&实&谎&实&谎& 实&实
实&谎&实&谎&实& 谎&实
实&谎&实&谎&实&谎&谎
谎&实&谎&实&谎&实&谎
回到前天,天数集体左移二格
实&谎&实&谎&谎& 实&谎&
谎&实&谎&实&谎& 谎&实&
周六相等,都说谎了,天数加二,答案是周一
这个问题。有点难。
正解:礼拜......
为什么这么简单的题目,还这么多人在纠结。。
从题意可以看出,今天和前天是对立的,就是今天说真话了,那么前天一定是谎话,今天说谎话了,那么前天说真话,因此可以用下面的代码判断。
public&static&void&main(String[]&args)&{
boolean[]&zhang&=&{&false,&true,&false,&true,&false,&true,&true&};
boolean[]&li&=&{&true,&false,&true,&false,&true,&false,&true&};
String[]&week&=&{&&星期一&,&&星期二&,&&星期三&,&&星期四&,&&星期五&,&&星期六&,&&星期天&&};
for&(int&i&=&0;&i&&&WEEK;&i++)&{
if&(((zhang[i]&!=&zhang[(i&+&5)&%&7])&&&&(li[i]&!=&li[(i&+&5)&%&7])))&{
System.out.println(&今天是&&&&+&week[i]);
public&static&void&main(String[]&args)&{
boolean&zhangsan[]&=&{&false,&true,&false,&true,&false,&true,&true&};
boolean&lisi[]&=&{&true,&false,&true,&false,&true,&false,&true&};
int&zq&=&0;
for&(int&i&=&0;&i&&&7;&i++)&{
zq&=&i&&&1&?&i&-&2&:&6&-&i;
if&(((zhangsan[i]&&&&!lisi[i])&&&&((zhangsan[i]&!=&zhangsan[zq])&||&(lisi[i]&!=&lisi[zq])))
||&((!zhangsan[i]&&&&lisi[i])&&&&((zhangsan[i]&!=&zhangsan[zq])&||&(lisi[i]&!=&lisi[zq]))))&{
System.out.println(i);
肯定是周一,周二的前天是星期天,题目没给出星期天情况,所以星期二和星期天不考虑。
其他的日子都是该说谎的人说了实话,不该说谎的人说了谎。
正确答案:周一~!
张村的人星期一三五说谎,李村的人星期二四六说谎,那星期天要说真话。除了星期天和星期二的任何一天都满足这个条件
我这么写为什么不对,求大神帮忙看看
public&class&WhenLie&{
public&static&void&main(String[]&args)&{
VillageA&a;
VillageB&b;
//对每一天进行判断,看前天是否都为说谎日
for&(int&i&=&1;&i&&=&7;&i++)&{
day&=&new&Day(i);
a&=&new&VillageA(day);
b&=&new&VillageB(day);
Day&beforeYestoday&=&day.yestaday().yestaday();
boolean&a_answer&=&a.answer(beforeYestoday);
boolean&b_answer&=&b.answer(beforeYestoday);
if&(!a_answer&&&&!b_answer)&{
System.out.println(i);
//A村构建一个类
class&VillageA&{
boolean&isTellLie&=&&&&&//true代表说真话
//初始化判定当天是否说谎日
VillageA(Day&day)&{
if&(day.id&==&1&||&day.id&==&3&||&day.id&==&5)&{
isTellLie&=&
//回答某一天是否说谎日,此day不一定是当天
boolean&answer(Day&day)&{
VillageA&v&=&new&VillageA(day);
if&(isTellLie)&{
return&v.isTellL
return&!v.isTellL
class&VillageB&{
boolean&isTellLie&=&
VillageB(Day&day)&{
if&(day.id&==&2&||&day.id&==&4&||&day.id&==&6)&{
isTellLie&=&
boolean&answer(Day&day)&{
VillageA&v&=&new&VillageA(day);
if&(isTellLie)&{
return&v.isTellL
return&!v.isTellL
//构建一个日期类,有成员变量id表明是星期几(1代表周一,2代表周二,类推)
class&Day&{
Day(int&id)&{
this.id&=&
//返回一个昨天
Day&yestaday()&{
if&(id&&&1)&{
}&else&if&(id&==&1)&{
Day&day&=&new&Day(id);某知名公司笔试题(性格测试+常识+逻辑测试)_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
某知名公司笔试题(性格测试+常识+逻辑测试)
上传于||文档简介
&&某​知​名​公​司​笔​试​题
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 公司面试逻辑题 的文章

 

随机推荐