码迷,mamicode.com
首页 > 其他好文 > 详细

nefu 6 通宵教室 详解

时间:2015-02-11 14:39:20      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:nefu-6

http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=6

题意: 教室里面有n盏灯分别标号1,2,3……n。最开始所有灯都是灭的,有n个同学顺序进入教室,当第一个同学进入教室时,灯全亮;当第二个同学进入教室时,标号为偶数的灯熄灭;当第三个同学进入教室时,执行如下操作: 标号为3的倍数的灯如果是灭的,就把它打开;如果是开的,就把它熄灭;
问这样下去,最后亮着的灯有多少盏。(1<=n<2^32)

分析:数据很大无法直接模拟。
(1) 但是我们很容易发现出规律:如果一盏灯最后是亮的,那么这盏灯的标号一定有奇数个因子,如果标号有偶数个因子,那么一定是灭的。
举个例子: 标号为4的那盏灯 因子:1,2,4
第一个人进去,亮
第二个人进去,灭
第四个人进去,亮

(2) 有结论(1)之后,还需要另一个数学知识
我们可以知道一个大于1的数 n,肯定有两个约数1和n,那么现在当且仅当 n有一个因子i,当i*i=n的时候,n的因子个数才是奇数个。
满足条件的灯的标号依次是:1,4,9,16,25….n^2
(3)综上所述:给定一个整数n,(int)sqrt(n)即为所求;

#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;

int main(int argc, char *argv[])
{int n;
 long long m;
 while(cin>>n)
 {for(int i=0;i<n;i++)
     {
          cin>>m;
          cout<<(int)sqrt(m)<<endl;           
     }
 }


  return 0;
}



nefu 6 通宵教室 详解

标签:nefu-6

原文地址:http://blog.csdn.net/liusuangeng/article/details/43732889

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!