有关“树上剩余几只鸟”的问题的思考及解答

最近,我被问到了一个貌似脑筋急转弯的问题:“树上有五只鸟,猎人开枪打死了一只,请问树上还剩下几只鸟?”

对于这个问题,想必大家都有被问到过,或者是在什么地方看到过。这个问题实际上并没有标准答案,它考察的是一个人思维的发散程度。对于自己想到的每个答案,只要能够找到让人信服的理由就可以了。

我认为,这个问题的答案可以是大于或等于0的任意一个整数,具体原因如下代码所示:

/**********************************************************************
* 版权所有 (C)2015, Zhou Zhaoxiong。
*
* 文件名称:AnswersOfBirds.c
* 文件标识:无
* 内容摘要:有关“树上剩余几只鸟”的问题的解答
* 其它说明:无
* 当前版本:V1.0
* 作    者:Zhou Zhaoxiong
* 完成日期:20160108
*
**********************************************************************/
#include <stdio.h>

// 重定义数据类型
typedef unsigned int        UINT32;
typedef signed   int        INT32;

/**********************************************************************
* 功能描述:主函数
* 输入参数:无
* 输出参数:无
* 返 回 值:无
* 其它说明:无
* 修改日期        版本号      修改人              修改内容
* ---------------------------------------------------------------
* 20160108        V1.0     Zhou Zhaoxiong          创建
***********************************************************************/
INT32 main()
{
    UINT32 iBirdsLeft = 0;      // 用于表示树上剩余的鸟的数量

    // 输入想要的答案
    printf("请输入你想要的答案(可以输入任意一个大于或等于0的整数): \n");
    scanf("%d", &iBirdsLeft);

    // 根据输入的答案找到给出此答案的理由
    switch (iBirdsLeft)
    {
        case 0:
        {
            printf("打死其中一只鸟之后, 这只被打死的鸟掉到了地上, 其他四只鸟因为受到了惊吓, 所以也飞走了, 树上一只鸟也没有了!\n");
            break;
        }

        case 1:
        {
            printf("打死其中一只鸟之后, 这只被打死的鸟还挂在树上, 其他四只鸟因为受到了惊吓, 所以也飞走了, 树上剩下了这只被打死的鸟!\n");
            break;
        }

        case 2:
        {
            printf("打死其中一只鸟之后, 这只被打死的鸟还挂在树上, 其他四只鸟中有一只是死者的伴侣, 它一直守护在死者的身边, 而另外三只鸟飞走了, 因此树上剩下了两只鸟!\n");
            break;
        }

        case 3:
        {
            printf("打死其中一只鸟之后, 这只被打死的鸟还挂在树上, 其他四只鸟中有两只是死者的父母, 它们一直守护在死者的身边, 而另外两只鸟飞走了, 因此树上剩下了三只鸟!\n");
            break;
        }

        case 4:
        {
            printf("打死其中一只鸟之后, 这只被打死的鸟掉到了地上, 其他四只鸟一时之间不知道发生了什么事, 都留在原地不动, 因此树上剩下了四只鸟!\n");
            break;
        }

        case 5:
        {
            printf("打死其中一只鸟之后, 这只被打死的鸟还挂在树上, 其他四只鸟分别是死者的父母和两个子女, 它们一直守护在死者的身边, 因此树上剩下了五只鸟!\n");
            break;
        }

        default:   // 输入6或更大的数
        {
            printf("被打死的鸟属于一个稀有的品种, 猎人因此受到了惩罚, 大家也开始保护环境, 这使得树上的鸟儿越来越多了!\n");
            break;
        }
    }

    return 0;
}

以上只是我给出的一组解答,相信大家也会给出自己心目中的答案。总的说来,从不同的角度来看待这个问题,就会给出不同的答案,这也正如一句诗所云:“横看成岭侧成峰,远近高低各不同”。

时间: 2024-10-13 22:14:04

有关“树上剩余几只鸟”的问题的思考及解答的相关文章

树上10只鸟,开枪打死1只,还剩几只?

记得在幼儿园里面听过这个问题,俺笨笨的回答“还有9只”,结果答错!今天在 QQ 群里面看到一特符合今年的生肖的回答版本,贴上来大家一起笑笑!另注,出处不明! 树上有十只鸟,开枪打死一只,还剩几只? 某日,老师在课堂上想考考学生们的智商,就问一个男孩: “树上有十只鸟,开枪打死一只,还剩几只?”男孩反问:“是无声手-枪,还是其他没有声音的枪么?”“不是.”“枪声有多大?”“80~100分贝.”“那就是说会震的耳朵疼?”“是.”“在这个城市里打鸟犯不犯法?”‘不犯.”“您确定那只鸟真的被打死啦?”“

如果早起的那只鸟没有吃到虫子,那就会被别的鸟吃掉。

http://yuedu.baidu.com/album/view/b09467cdda38376baf1faef3/2015-05-24 http://yuedu.baidu.com/album/view/b09467cdda38376baf1faef3.html/2015-05-24 http://yuedu.baidu.com/album/view/aee81901a6c30c2259019ef3/2015-05-24 http://yuedu.baidu.com/album/view/a

案例分析:从一则笑话分析需求的陷阱

某日,老师在课堂上想考考学生们的智商,就问一个男孩:“树上有十只鸟,开枪打死一只,还剩几只?” 男孩反问:“是无声枪么?” “不是.” “枪声有多大?” “80~100分贝.” “那就是说会震的耳朵疼?” “是.” “在这个城市里打鸟犯不犯法?” ‘不犯.” “您确定那只鸟真的被打死啦?” “确定.”老师已经不耐烦了,”拜托,你告诉我还剩几只就行了,OK?” “OK.鸟里有没有聋子?” “没有.” “有没有关在笼子里的?” “没有.” “边上还有没有其他的树,树上还有没有其他鸟?” “没有.”

编写程序到底是什么玩意?

今天有人提问:我们学编程,到底是学什么? 我想了一会儿,回答他:"学编程,就是学着怎么制定规则!" 所以你会发现,在学编程的人中,逻辑思维能力强的人,编程一般都学得不错,而做事丢三落四的人一般都学得不好. 在网上看到一个笑话,就很好的说明了有编程思维和没有编程思维人的区别. 某日,一个大学老师提问一学生,树上有十只鸟,开枪打死一只,还剩几只? 普通人回答:还有九只.(死了一只,树上还站着九只) 脑筋能转一次弯的人回答:还有一只.(死的还在树上,另外九只吓跑了) 脑筋能转两次弯的人回答:

hdu--1231&amp;&amp;1003--dp

这2题 可以放一起  1231可以算1003的进化版... 这2题 我用的方法一样 O(1)空间复杂度 O(n)时间复杂度 ... 这是我自己的说法 错了告知我=-= 其实 1231你要是开一个数组的话 就和1003写的时候差不多了 当然那就最好不要开了 touch me 1st                  touch me 2nd 1003的代码  老早写的... 1 #include <iostream> 2 using namespace std; 3 4 const int in

HDU5233 Gunner II 离散化的各种方法

题目链接: HDU5233 题意: n棵树依次排好,每棵树都有一个高度,树的顶端有一只鸟. 猎人会打M枪,每一枪都能从高度为X的树上打下一只鸟,问每一枪打下的鸟是从  编号多少的树 上掉下来的 题解思路: 因为树的高度能达到(10^9)  而树的数量最多10^5  所以离散化   将所有高度为X的树离散化为 高度为第X高的树 有多种方法. 1  stl去重+set版: #include<iostream> #include<cstdio> #include<cstring&g

测试用例与软件测试基础

一.软件测试基础 软件:简单的理解就是软件是一个集合,包含三个部分:程序代码.文档.数据 软件测试:软件测试就是为了发现错误而审查软件文档.检查软件数据和执行程序代码的过程.其目的在于在软件交付使用前充分发现缺陷并协助相关部门定位.解决缺陷,最后交付一个高质量的软件给用户.软件测试是软件生存周期的一个重要阶段,其主要任务是对被测对象,从初期的需求规格说明书,到最后的系统交付使用,整个过程进行检查.验证,以确保软件质量. 测试目的:基于不同的立场,存在着两种完全不同的测试目的.从用户的角度出发,普

有哪些好笑的关于程序员的笑话

0. 某女:你能让这个论坛的人都吵起来,我今晚就跟你走. 某软件工程师:PHP 是最好的语言! 某论坛炸锅了,各种吵架... 某女:服了你了,我们走吧你想干啥都行. 某软件工程师:今天不行,我一定要说服他们,PHP 必须是最好的语言某女:....... 1. 你们饭店需要客户端吗? 不忙的时候都是小二端,只有忙的时候才需要客户端. 2. “你们用盗版的时候有想过做出这款软件的程序员吗?!他们该如何养家糊口?” “哈哈哈,别逗了,程序员哪有家要养啊!” 3. 某程序员被一个妹子请去修宽带,那个破电

CodeForces922E DP//多重背包的二进制优化

https://cn.vjudge.net/problem/1365218/origin 题意 一条直线上有n棵树 每棵树上有ci只鸟 在一棵树底下召唤一只鸟的魔法代价是costi 每召唤一只鸟,魔法上限会增加B 从一棵树走到另一棵树,会增加魔法X 一开始的魔法和魔法上限都是W 问最多能够召唤的鸟的个数 显然这是一道DP题 用dp[i][j]来表示到j这个树下选到j只鸟可以获得的最大能量值 很容易得出dp状态转移方程dp[i][j] = max(dp[i][j],dp[i][j - 1] - c