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

哈利·波特与阿兹卡班囚徒 HZNUOJ2227

时间:2020-07-02 00:21:30      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:结束   约数   esc   print   clu   题意   波特   a*   eof   

Description

小天狼星打算逃出阿兹卡班了。众所周知,阿兹卡班是一个从来没人能够逃出的监狱。因为每个囚徒都是单独牢房,且牢房内设施简陋。然而法力高强的小天狼星发明了一个强大又神奇的魔法。阿兹卡班一共关押了n个囚徒,且这个魔法能够让摄魂怪进行n次操作牢房房门开关,且第i次操作只能把编号为i的倍数的牢房门打开或者关闭。现在我们知道囚徒数n。求n次操作后,牢房门打开的牢房有多少个?

Input

正整数n(1<n<=10^6)。多组输入,直到EOF结束。

Output

每行输出一个正整数,对应每个n。

 

思路:

1) 暴力破解 

  对于这样的问题 最先想到的当然是暴力循环了。  用一个装有1000000个元素的数组 代表这1000000扇牢门。暴力循环 每按一次魔法对应元素的值变换一次。(但是本题的n比较大,直接循环会超时)。 

2) 通过题意  我们知道 每次按的 都是次数的 倍数  所以 我们可以通过求公约数来实现

  例如: 编号为12 的灯牢门在 第1,2,3,4,,6,12次被操作而 12=1*12=2*6=3*4一共按了6次 (偶数次 )所以最后是关着的  。
      编号为9的牢门 在第1,3,9次被按下 一共按了奇数次 所以最后牢门是开着的。

3) 通过思路2我们知道了 最后亮灯的都是按了奇数次的灯。在求约数时  因为:N=a*b 有了a就有b 为了为奇数 a的等于b 。 所以 最后等亮着的是完全平方的数 。

1 #include<stdio.h>
2 #include<math.h>
3 int main(){
4     int n;
5     while(scanf("%d",&n)!=EOF){    
6         printf("%d\n",(int)sqrt(n));
7     }
8 }

 

哈利&#183;波特与阿兹卡班囚徒 HZNUOJ2227

标签:结束   约数   esc   print   clu   题意   波特   a*   eof   

原文地址:https://www.cnblogs.com/CSA01/p/13222268.html

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