HDoj 2053 Switch Game

Problem Description
There are many lamps in a line. All of them are off at first. A series of operations are carried out on these lamps. On the i-th operation, the lamps whose numbers are the multiple of i change the condition ( on to off and off to on ).
 

 

Input
Each test case contains only a number n ( 0< n<= 10^5) in a line.
 

 

Output
Output the condition of the n-th lamp after infinity operations ( 0 - off, 1 - on ).
 

 

Sample Input
1 5
 

 

Sample Output
1 0
Hint
hint
Consider the second test case: The initial condition : 0 0 0 0 0 … After the first operation : 1 1 1 1 1 … After the second operation : 1 0 1 0 1 … After the third operation : 1 0 0 0 1 … After the fourth operation : 1 0 0 1 1 … After the fifth operation : 1 0 0 1 0 … The later operations cannot change the condition of the fifth lamp any more. So the answer is 0.
 

 

Author
LL
 

 

Source
 

 

Recommend
linle   |   We have carefully selected several similar problems for you:  2056 2054 2057 2055 2061 
 
第一种方法:按照题意来做:
#include<stdio.h>
#include<malloc.h>
int main()
{
    int n=0;
    while(scanf("%d",&n)!=EOF)
    {
        int *a=(int *)malloc(sizeof(int)*(n+1));
        for(int i=1;i<=n;i++)
            a[i]=-1;
        for(int i=1;i<=n;i++)
        {
            int m=1;
            while(m*i<=n)   //如果是遍历1~n的数组的话会超时
            {
                a[m*i]*=-1;
                m++;
            }
        }
        if(a[n]==-1)
            printf("0");
        else
            printf("1");
        printf("\n");
        free(a);
    }
}

 

 

 

第二种方法:只关注第n个灯

#include<stdio.h>
#include<malloc.h>
int main()
{
    int n=0;
    while(scanf("%d",&n)!=EOF)
    {
        int ans=-1;     //表示第n个灯一开始是关着的
        for(int i=1;i<=n;i++)
        {
            if(n%i==0)
                ans*=-1;
        }
        if(ans==-1)
            printf("0");
        else
            printf("1");
        printf("\n");
    }
}

 

posted on 2020-04-12 16:39  沈香茶  阅读(170)  评论(0)    收藏  举报