3476 - 小青蛙的超能力
时间限制 : 1 秒
内存限制 : 128 MB
一只小青蛙蹲在一片荷叶上思考人生。突然的,它很想跳跃,于是它一蹬腿~跳到了旁边荷叶上。
小青蛙觉得自己很失败,它想要跳得更远,它向天空大喊:呱呱呱~~~。
上天仿佛听到了小青蛙的呐喊,God赐予了小青蛙一项特殊能力:它的跳跃能力会从开始跳跃后每分钟后增加一个荷叶长度,但每分钟只能跳一次(要蓄能-_-)。
即第一分钟能跳过0个,第二分钟能跳过1个荷叶,第三分钟能跳过两个。(注意,是跳“过”荷叶。)
在这片池塘里有N片荷叶,且是围成一个环状。
那么,小青蛙以这种超能力能否将这些荷叶全部跳一遍,即每个荷叶都能踩上一脚?小青蛙本身的起始位置的荷叶编号为1。
题目输入
只有一个整数n:1<=n<=1000.
有多行数输入。
题目输出
如果能全部跳上一遍,输出YES,否则就输出NO。
输入/输出样例
输入格式
4 5
输出格式
YES NO
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; }
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; }