游客 Signup | Login
中文 | En

3476 - 小青蛙的超能力

一只小青蛙蹲在一片荷叶上思考人生。突然的,它很想跳跃,于是它一蹬腿~跳到了旁边荷叶上。
小青蛙觉得自己很失败,它想要跳得更远,它向天空大喊:呱呱呱~~~。
上天仿佛听到了小青蛙的呐喊,God赐予了小青蛙一项特殊能力:它的跳跃能力会从开始跳跃后每分钟后增加一个荷叶长度,但每分钟只能跳一次(要蓄能-_-)。
即第一分钟能跳过0个,第二分钟能跳过1个荷叶,第三分钟能跳过两个。(注意,是跳“过”荷叶。)
在这片池塘里有N片荷叶,且是围成一个环状。
那么,小青蛙以这种超能力能否将这些荷叶全部跳一遍,即每个荷叶都能踩上一脚?小青蛙本身的起始位置的荷叶编号为1。

Input

只有一个整数n:1<=n<=1000.

有多行数输入。

Output

如果能全部跳上一遍,输出YES,否则就输出NO。

Examples

Input

4
5

Output

YES
NO

Hint

 当荷叶数是5时, 小青蛙跳的顺序是:1->2->4->2->1->1->2…….

Solution C

#include<stdio.h>
int main()
{
    int m,i,j,n,b;
    while(~scanf("%d",&n))
    {
        int a[1010]={0};
        m=0;
        b=1;
        for(j=1;;m++)
        {
            if(a[j]==1)
                break;
            else
            {
                a[j]=1;
                j=j+m+1;
                if(j>n)
                    j=j%n;
                if(j==0)
                    j=1;
            }
        }
        for(i=1; i<=n; i++)
            if(a[i]==0)
            {
                b=0;
                break;
            }
        if(b==0)
            printf("NO\n");
        else
            printf("YES\n");
    }
    return 0;
}

Solution C++

#include <iostream>
#include <cstdio>
using namespace std;
int a[1000];
int main()
{
    int n;
    while(~scanf("%d", &n))
    {
        int i,sum=0;
        for(i=1; i<=n; i++)
        {
            sum+=i;
        }
        a[0]=1;
        a[1]=2;
        for(i=2; i<n; i++)
        {
            a[i]=(a[i-1]+(i-1))%n+1;

        }
        int sum1=0;
        for(i=0; i<n; i++)
        {
            sum1+=a[i];
        }

        if(sum==sum1)

            cout<<"YES"<<endl;

        else
            cout<<"NO"<<endl;
    }
    return 0;
}

Hint

 当荷叶数是5时, 小青蛙跳的顺序是:1->2->4->2->1->1->2…….

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题