您的位置:首页 > 职场人生

面试 智力题 概率题 游戏题

2013-09-26 21:14 435 查看


史密斯夫妇握手问题

题目:

史密斯夫妇邀请另外四对夫妇就餐,已知他们每个人都不和自己握手、不和自己的配偶握手、且不和同一个人握手一次以­上。在大家见面握手寒暄后,史密斯问大家握手了几次,每个人的答案都不一样。问:史密斯太太握手几次

解答:

1. 总共10个人,每个人不与自己握手,不与配偶握手,不与同一个人握超过一次手,所以每个人最多握8次手,最少0次;

2. Mr.Smith问其它9个人握了几次手,各人回答不一样,所以每个人的握手次数刚好为0-8次,每种不同次数有1个人;

3. 有且只有一个人握了8次手,称之为A,即A与其配偶以外的所有人都握了手;

4. 记A的配偶为a,除了A夫妇以外,所有人都至少握了1次手(和A),所以握手0次的肯定是a;

5. 从10个人中去掉A夫妇,因为A与其余每个人握了1次手,而a没有与别人握手,所以去掉A夫妇后,其它人的握手次数为1-7(不算Mr.Smith),再去掉他­们各自与A握的那次手不算,则各人的握手次数为0-6,还是每种不同次数刚好有1个人;

6. 重复第3-5步4次,直到去掉4对夫妇,最终剩下Mr.&Mrs.Smith,这时Mrs.Smith的握手次数为0,加上4次循环中去掉的4次握手,她总共握­了4次手,与每对夫妇中的某一位各握了一次。

一对夫妇,邀请N-1对夫妇参加晚会。夫妇之间,丈夫肯定认识妻子。每个人和自己不认识的人都要握手一次。握手完了之后,男主人站出来问了其他所有人的握手情况。发现,任何一个人的握手情况都和别人不相同。问你,女主人握了几次手(答案是N-1次)

转自 http://hi.baidu.com/luotuo512/item/97f8c9f08497fd0dc7dc453f

A城一个商人有一头驴子和3000根胡萝卜.要将萝卜拉到1000公里外的B城去卖,只能用驴子驮。已知驴子一次性可驮1000根胡萝卜,但每走一公里要吃掉一根胡萝卜.问商人共可卖出多少胡萝卜?

这题的问题出在给的条件不充分,可能有两种情况,一种是非理想状态的拉运萝卜,这种情况的话,一个也不能卖出去;第二种为理想状态下的,就是能在每走一公里的时候能够卸货下来,并且还没有其他的外在因素使得萝卜丢失,这样的理想状态下能够运送到B城833个萝卜。计算过程如下:1、因为有3000萝卜,所以消耗掉前面的1000个萝卜的时候,每前进一公里要来回3次消耗3个萝卜,因此第一次前进了X公里,X=1000/3=333余数为1;2、剩下的2001个萝卜在第334公里的时候需要来回3次才能运送完,我们就将这一公里路算在2000个萝卜在第一次运送的时候算在一起,那么第二次运送萝卜只需要来回2次消耗2个萝卜,因此第二次消耗1000个萝卜前进了Y公里,Y=1000/2=500;现在前进了500+333=833公里,剩下167公里后,萝卜也只剩下了1000个,所以就这1000个直接中途不卸货的一次到达B城,消耗167个萝卜,所以最后剩下1000-167=833个萝卜。

转自 http://wenwen.soso.com/z/q217692689.htm
八皇后问题

算法介绍八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当 n = 1 或 n ≥ 4 时问题有解。


Java 算法

public class Queen {
// 同栏是否有皇后,1表示有
private int[] column;
// 右上至左下是否有皇后
private int[] rup;
// 左上至右下是否有皇后
private int[] lup;
// 解答
private int[] queen;

// 解答编号
private int num;

public Queen() {
column = new int[8+1];
rup = new int[2*8+1];
lup = new int[2*8+1];

for(int i = 1; i <= 8; i++)
column[i] = 1;

for(int i = 1; i <= 2*8; i++)
rup[i] = lup[i] = 1;

queen = new int[8+1];
}

public void backtrack(int i) {
if(i > 8) {
showAnswer();
}
else {
for(int j = 1; j <= 8; j++) {
if(column[j] == 1 &&
rup[i+j] == 1 &&
lup[i-j+8] == 1) {
queen[i] = j;
// 设定为占用
column[j] = rup[i+j] = lup[i-j+8] = 0;
backtrack(i+1);
column[j] = rup[i+j] = lup[i-j+8] = 1;
}
}
}
}

protected void showAnswer() {
num++;
System.out.println("\n解答 " + num);
for(int y = 1; y <= 8; y++) {
for(int x = 1; x <= 8; x++) {
if(queen[y] == x) {
System.out.print(" Q");
}
else {
System.out.print(" .");
}
}
System.out.println();
}
}

public static void main(String[] args) {
Queen queen = new Queen();
queen.backtrack(1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: