2013年10月23日 星期三

[UVA]Jolly Jumpers

UVA 10038、CPE 10405程式解題。
















































解題觀念:


給你一個數列,算出兩個數字間的差值,是否為1~"數字總個數"的範圍裏面。

好,純文字敘述看不懂我知道,看下面舉例吧。

假如:
3,2,5,3,其數字絕對值得差值為1,3,2,,這個數列總共有4個數字,

{1,3,2}集合有在1~4範圍裡,且沒有重複,所以為Jolly Jumpers。

反之,則不是。

所以這題會用到集合喔~

另外題目還有測資範圍要求,數字長度不超過3000,所以要記得加判斷式。




解題步驟:

用Collection創建新的HasfSet物件 => ans。(*) set可以將資料存放進集合,且不重複
 (如果不太懂的話,詳細資料就要請大家去查一下函式庫囉!)

宣告整數變數n為設定數列長度(個數)。

在宣告變數a,b,輸入數列的數字。

先輸入開頭數字=>a,設定for迴圈範圍為數字長度n,

輸入下一個數字=>b,計算a,b兩者之間絕對值的差值。

進入判斷式 ,如果差值為1~n-1範圍之間,則存入集合裡面。語法:(ans.add()) 。

重設a的值等於b

結束for迴圈,如果集合裡面的資料個數為n-1個,則為Jolly Jumpers。

最後要記得將集合清空(ans.clear()),讓下組資料存進去。



EX:

4 3 2 5 3

陣列長度為4 => n。

a = 3,進入for迴圈,b = 2,進入絕對值計算,d = 1,進入if判斷式,符合,存入集合。

ans = [1],重設a的值=>a=b=2。

再跑一次for迴圈,輸入5 = b,進入絕對值計算,d = 3,進入if判斷式,符合,存入集合。

ans = [1,3],重設a的值=>a=b=5。

再跑一次for迴圈,輸入3 = b,進入絕對值計算,d = 2,進入if判斷式,符合,存入集合。

ans = [1,3,2],重設a的值=>a=b=3。

跳出for迴圈,進入判斷式,3 = 3符合,印出Jolly Jumpers。

清空集合。


By  小K






沒有留言:

張貼留言