HDU2053

題目出自杭電
題目

題目大意:
先把這些燈標上號,1 2 3 4 5 6 7 8 ……無窮
首先全是關的,也就是全是0
第一次操作 ,標號是1的倍數,全都變成相反的狀態,也就是全變成1..
第二次操作 ,標號是2的倍數,全都變成相反的狀態,你可以看下,2 4 6……變成了0..
第三次操作 ,標號是3的倍數,全都變成相反的狀態,你可以看下,3 6 9……
問:N 號檯燈最後 變成了 什麼狀態,

分析:
1.例如 1號燈,最後變成了1,不管多少次操作都是1..
例如 5號燈 最後變成了0,不管多少次操作都是0..
所以當操作次數大於N的時候 N的狀態就不會改變了,因爲N不會是M(M>N)的倍數.
2.一開始燈都是滅的,所以按得次數是奇數時燈亮(1),按得次數是偶數時燈滅(0)。
3.一盞燈被按次數等於它的編號的約數。即,編號約數是奇數時燈亮,偶數時燈滅。又因爲,完全平方數有奇數個約數。
所以問題轉化爲求有多少個約數的問題

#include <stdio.h>
#include<math.h>
int a,n,i,j;
int yue(int n)
{
    int cnt=2;
    int sq = floor( sqrt(n * 1.0) + 0.5 ) ;    // 0.5 爲修正浮點數誤差,floor()爲捨去小數點後的部分進行取整
    for(i=2;i<sq;i++)
    {
        if(n%i==0)
            cnt+=2;
    }
    if(sq *sq == n) --cnt;
    return cnt;
}
int main()
{

    while(~scanf("%d",&a))
    {
        i=yue(a);
        if(i%2==0)
            printf("0\n");
        else printf("1\n");
    }
    return 0;
}
發佈了47 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章