• poj 1218(经典开关问题,模拟)


     经典开关问题:

    大概意思如下:一个监狱看守员喝醉了酒,于是把监狱每扇门都打开(假设有n扇门);然后再从1号门开始,隔一扇关一个门(把2的倍数的门关掉);接着再从1号门开始,隔2扇操作一个门(操作3的倍数的门,原来是开的关掉,关着的则打开)。这样一直操作到n的倍数,问最后有多少扇门是打开的。
    这个也可以叫关灯问题:有n个灯,分别由n个开关控制,拨一下开关则可以改变灯的状态(开->关 关->开)。初始状态灯都是关着的,先把每个开关都拨一下,然后拨一下2的倍数的开关,接着3的倍数,直到n的倍数,问最后有多少灯是开着的。

     

    模拟:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int main()
     6 {
     7     int T;
     8     cin>>T;
     9     while(T--)
    10     {
    11         int n;
    12         int i,j;
    13         cin>>n;
    14         int a[117];
    15         memset(a,0,sizeof(a));
    16         for(i=1; i<=n; i++)
    17         {
    18             for(j=1;j<=n;j++)
    19             {
    20                 if(j%i==0)a[j]=!a[j];// 每一次都取相反状态
    21             }
    22         }
    23         int k=0;
    24         for(i=1;i<=n;i++)
    25         {
    26             if(a[i]!=0)k++;//如果不等于0,则说明灯开着
    27         }
    28         cout<<k<<endl;
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    requirejs小记
    backbone入门
    简单的javascript/css slider滑动条
    又一个简单试用的javascript Slider插件
    Hdu3926 Hand in Hand
    今天OJ升级的学习内容总结
    非常实用的PHP代码片段
    第一次面试经历
    PHP Filesystem 函数
    MFC实现 MSN QQ 窗口抖动
  • 原文地址:https://www.cnblogs.com/wally/p/2591885.html
Copyright © 2020-2023  润新知