• 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
  • 相关阅读:
    第十五节 css3动画之animation简单示例
    第十四节 css3动画之animation
    第十三节 css3动画之翻页动画
    第十二节 css3动画之三维X轴旋转
    第十一节 css3动画之三维Y轴旋转
    第十节 css3动画之transform斜切
    第九节 css3动画之transform旋转
    第八节 css3动画之transform缩放
    ECMAScript基本语法——⑤运算符 比较运算符
    ECMAScript基本语法——⑤运算符 赋值运算符
  • 原文地址:https://www.cnblogs.com/liugl7/p/6241257.html
Copyright © 2020-2023  润新知