题目大意:给出n个数字的序列,如果全部的相邻两个数字的差取遍从1到n-1的整数,输出"Jolly",否则输出"Not jolly"。比如1 4 2 3,相邻两数之差分别为3 2 1,于是输出"Jolly"。
使用一个bool数组:如果vis[i]==true,i出现过;否则没有出现过。要注意到差值可能很大,因此要判断是否会发生数组越界。
以下是我的代码:
#include<stdio.h>
long Abs(long x)
{
return (x>0?x:-x);
}
bool jolly(bool a[],long n)
{
for(long i=1;i<=n-1;i++)
if(!a[i]) return false;
return true;
}
int main()
{
const long maxn=3007;
long n,a[maxn];
bool vis[maxn];
while(scanf("%ld",&n)==1)
{
for(long i=1;i<=n;i++) scanf("%ld",&a[i]);
// Read In
for(long i=1;i<=n;i++) vis[i]=false;
// Clear
for(long i=1;i<=n-1;i++)
{
long t=Abs(a[i+1]-a[i]);
if(t<=n-1) vis[t]=true;
}
if(jolly(vis,n)) printf("Jolly\n");
else printf("Not jolly\n");
}
return 0;
}
posted on 2010-01-22 12:35
lee1r 阅读(900)
评论(2) 编辑 收藏 引用 所属分类:
题目分类:基础/模拟