cpe練習筆記 UVa10038 Jolly Jumpers




原文題目


題目大意
一個序列由n>0的整數組成,稱作 jolly jumper
如果兩個相依數之間的差值取絕對值使得整串數列有值1~n-1

輸出要求 
判斷是否為 jolly jumper 輸出 "Jolly" 或是 "Not jolly"

輸入範例 
4 1 4 2 3
5 1 4 2 -1 6

輸出範例 
Jolly
Not jolly

注意
由於此題目Input不會告知有多少筆資料所以要下面的方法來判斷是否該停止接收

while(scanf("%d",&num)!=EOF)

※EOF=end of file


程式碼

#include <stdlib.h>
#include <stdio.h>
 
int main(){
 int i,j,tmp,isJolly;
 int num,datas[3000]={0};
 
 //接收資料
 while(scanf("%d",&num)!=EOF){
  for(i=0;i<num;i++){
   scanf("%d",&datas[i]);
  }
  
  //計算差值
  for(i=1;i<num;i++){
   datas[i-1]=abs(datas[i]-datas[i-1]);
  }
  datas[num-1]=9999;//用原陣列存放差值,最後一個空間不要了
  
  //排序
  for(i=0;i<num;i++){
   for(j=1;j<num;j++){
    if(datas[j]<datas[j-1]){
     tmp=datas[j];
     datas[j]=datas[j-1];
     datas[j-1]=tmp;
    }
   }
  }
  
  //資料驗證
  isJolly=1;
  for(i=1;i<num-1;i++)
   if(datas[i]-datas[i-1]!=1)
    isJolly=0;
  
  //處理單一筆差值
  if(num==2)
   if(datas[0]!=1)
    isJolly=0;
  
  //輸出 
  if(num==1){
   printf("Jollyn");
  }
  else if(isJolly){
   printf("Jollyn");
  }
  else{
   printf("Not jollyn");
  }
  
 }
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料