一个比较有趣的题:推算今天星期几
2017-06-09 10:12
351 查看
题目:有一天你忘记了今天是星期几,你找来了八个人,让他们每人说两句话,第一句是星期几,另一句今天不是星期几,两句中一句真,一句假,可能第一句为真,也可能第二句为真。最后你确定今天是星期几,并输出。(输入描述,8行,每行是星期几的阿拉伯数字。输出描述一个数字,表示星期几)
输入:[[1,2],[2,6],[3,4],[5,1],[7,7],[1,5],[1,4],[4,2]]
输出:7
说实话,第一眼看到这个题就感觉有问题,假如我们极端的思考这个问题,八个都回答[[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]]
我们如何推算呢?还有3,4,5,6,7排除不了。所以题目还是有一定的问题,但是这里是让我们编写程序,所以要求不要那么严格,主要的就是判断,在推算。
首先来判断:
假如一个人的答案[1,2];假如今天为x,根据题目我们可以做出判断:
如果x == 1返回true;那么x != 2返回false。
如果x == 1返回false;那么x != 2返回true。
根据上边判断写出计算机能够运行的语言(这里我使用JS,判断都一样)
简化判断:
function printDate(arr) {
//param x ==>假如今天周几,用 x 去推算八个人的答案,num ==>计数器,x满足八个人的答案,则输出x
var x,num;
for(x = 1;x < 8;x++){//1 -- 7对每一天进行推算
num = 0;
for(var j = 0;j < 8; j++){
//对每一天进行判断
if(((x == arr[j][0])&&(x == arr[j][1]) || (x != arr[j][0])&&(x != arr[j][1]))){
num++;
//如果八个人都满足,输出x,并跳出本循环
if(num == 8){
console.log(x);
break;
}
}
}
}
}
//八个人的答案组成的数组
var arr1 = [[1,2],[2,6],[3,4],[5,1],[7,7],[1,5],[1,4],[4,2]];
var arr2 = [[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]];
printDate(arr1);//7
printDate(arr2);//3,4,5,6,7
从arr2可以看出,该判断对3,4,5,6,7不能再排除。
其实最主要的就是通过题目,提炼出判断条件。
输入:[[1,2],[2,6],[3,4],[5,1],[7,7],[1,5],[1,4],[4,2]]
输出:7
说实话,第一眼看到这个题就感觉有问题,假如我们极端的思考这个问题,八个都回答[[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]]
我们如何推算呢?还有3,4,5,6,7排除不了。所以题目还是有一定的问题,但是这里是让我们编写程序,所以要求不要那么严格,主要的就是判断,在推算。
首先来判断:
假如一个人的答案[1,2];假如今天为x,根据题目我们可以做出判断:
如果x == 1返回true;那么x != 2返回false。
如果x == 1返回false;那么x != 2返回true。
根据上边判断写出计算机能够运行的语言(这里我使用JS,判断都一样)
((x == 1) == true)&&((x != 2) == false)||((x == 1) == false)&&((x != 2) == true)
简化判断:
(x == 1)&&(x == 2)||(x != 1)&&(x != 2)条件总结出来,现在就是将每一个人的答案进行判断:
function printDate(arr) {
//param x ==>假如今天周几,用 x 去推算八个人的答案,num ==>计数器,x满足八个人的答案,则输出x
var x,num;
for(x = 1;x < 8;x++){//1 -- 7对每一天进行推算
num = 0;
for(var j = 0;j < 8; j++){
//对每一天进行判断
if(((x == arr[j][0])&&(x == arr[j][1]) || (x != arr[j][0])&&(x != arr[j][1]))){
num++;
//如果八个人都满足,输出x,并跳出本循环
if(num == 8){
console.log(x);
break;
}
}
}
}
}
//八个人的答案组成的数组
var arr1 = [[1,2],[2,6],[3,4],[5,1],[7,7],[1,5],[1,4],[4,2]];
var arr2 = [[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]];
printDate(arr1);//7
printDate(arr2);//3,4,5,6,7
从arr2可以看出,该判断对3,4,5,6,7不能再排除。
其实最主要的就是通过题目,提炼出判断条件。
相关文章推荐
- 今天去面试了一家公司,有一个题目比较有趣
- 今天改写了一个VB6进度条控件,比较完善了,支持 XP 效果
- 一个比较有趣的例子
- 今天遇到了一个很有趣的问题
- 今天遇到了一个有趣的问题是突然运行vs2005网页打不开了
- 今天装完ASM时遇到的一个比较低级的问题ORA-15149: another ASM instance found running on the host
- 今天发现一个有趣的东西Havok,喜欢FPS游戏的朋友对这单词应该有所耳闻吧
- 今天看到的一个有趣面试题:return *this和return this有什么区别?
- SQL Server比较Date和Datetime数据时一个有趣的问题
- 今天看到了一个进度条的.NET版本.功能比较强大
- 今晚发现一个比较有趣的js过关游戏,分享下
- 今天做了一个有趣的测试
- 今天在处理GridView分页问题时遇到了一个比较常见的分页出错问题。
- 今天遇到的一个比较变态的问题
- 今天一个比较感兴趣的心里测试
- 今天看到一个比较有意思的检查交换机端口好坏的方法
- 今天改写了一个VB6进度条控件,比较完善了,支持 XP 效果
- 第一个文章,今天比较兴奋啊! 给大家一个关于SQL复合查询的文章(动态生成多个where条件)
- 有感于--"今天碰到一道比较有趣的面试题,大家来探讨一下。"
- 今天在ITPUB上回复了一个帖子,这个帖子还是比较广度的,希望大家帮忙补充,谢谢!