題目大意:給出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 閱讀(911)
評論(2) 編輯 收藏 引用 所屬分類:
題目分類:基礎/模擬