哈利·波特与阿兹卡班囚徒 HZNUOJ2227
Posted csa01
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哈利·波特与阿兹卡班囚徒 HZNUOJ2227相关的知识,希望对你有一定的参考价值。
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 ",(int)sqrt(n)); 7 } 8 }
以上是关于哈利·波特与阿兹卡班囚徒 HZNUOJ2227的主要内容,如果未能解决你的问题,请参考以下文章