• NYOJ 455


      1.应该交代清楚,参加宴会的人不知道一共有多少顶帽子。假如知道有n顶帽子的话,第一次开灯看见有n-1只,自然就知道自己是第n顶黑帽子,所以应该是这n个人在第一次关灯就打自己脸,不过这么一来就没意思了,变成了数帽子游戏。
      2.另一方面,题设输入输出案例中给出输入2,输出2。说明1中的分析的假设条件就是大家不知道总数n,只是能看到n-1顶帽子。
      3.加上大家不知道总数n的条件之后再分析:(上帝视角来看知道共有n只黑帽子)分析A君,A君能看到n-1只黑帽子。
        n=1时,A君看到全白,即看到1-1=0只黑帽子。因为大家知道至少有一只黑帽子,那不用怀疑了,就是自己了,打吧。

               n=2时,A君看到2-1=1只黑帽子,但是他并不知道全场是不是只有一只(自己看到一只,如果有两只的话,那另一只只能是自己),如果看到戴黑帽子的人打了自己,那说明这个人严重看到的是全白,包括自己是白。   如果他没有打,那说明戴黑帽子这人严重看到的可不是全白啊,对立面是:“至少要有一只黑”。这和A君看到是一样的啊,那说明场上至少有两只黑帽子,而且这第二只就是自己。没逃了,打吧。

               n=3时,A君看待3-1=2只黑帽子,假如场上只有2只黑帽子的话,那这2个戴黑帽子的人的逻辑思考过程就是n=2的情况,那他们在第2次关灯时就会打自己,但事实并非如此,还是没响,那说明这2人眼中看到的可不是只有1只啊,对立面是:至少2只,而不是1只。这就和A君看到的是一样的了,A君由此断定这场上至少3只黑帽子,而且这第3只就是自己。没逃了,打吧。

               n=4时,A君看待4-1=3只黑帽子,假如场上只有3只黑帽子的话,那这3个戴黑帽子的人的逻辑思考过程就是n=3的情况,那他们在第3次关灯时就会打自己,但事实并非如此,还是没响,那说明这3人眼中看到的可不是只有2只啊,对立面是:至少3只,而不是2只。这就和A君看到的是一样的了,A君由此断定这场上至少4只黑帽子,而且这第4只就是自己。没逃了,打吧。

        ......

        数学归纳法n=k推出n=k+1的情况。

        得:f(n) = n .

     1 #include <stdio.h>
     2 #include <cmath>
     3 #include <string>
     4 #include <iostream>
     5 #include <cstdlib>
     6 using namespace std;
     7 
     8 int main(){
     9     int t;
    10     scanf("%d",&t);
    11     while(t--){
    12         long long n;
    13         scanf("%lld",&n); 
    14         printf("%lld
    ",n);
    15     } 
    16         
    17     return 0;
    18 }
    View Code
  • 相关阅读:
    一些手打的笔记
    字符集的相关知识
    Java的概述以及语法
    Java和eclipxe的安装以及第一个程序
    制作Html标签以及表单、表格内容
    2,8,10,16进制之间的转换
    验证日期时间
    验证输入一个月的31天
    验证输入一年的12个月
    身份证号验证
  • 原文地址:https://www.cnblogs.com/liugl7/p/6241257.html
Copyright © 2020-2023  润新知