2014年6月19日 星期四

[UVA]Nice Licence Plates

UVA 12602 程式解題。

































解題觀念:


這題簡單說就是,車牌的格式是固定的。前三位是英文字母,橫槓之後,後四位都是數字。

如題目所示:ABC-0123。

那這題題目就是要你:

1. 將前三位的英文字母,以賦予編號 0~26( EX:0 = A、1 = B、2 = C、......25 = Z ),
    並依照所在的位置做運算,總合起來。
    ( EX:A=( 0 * 26^2 ) + B=( 1* 26^1 ) + C=( 2* 26^0 ) = 28 )

2. 減掉後面4位的數字 ( 0123 )。

3. 判斷兩數之差的絕對值是否大於100,如果是則輸出not nice;如果否則輸出nice。

沒了。

所以重點就在於,如何將前三位的英文字母分別規劃好數字,做運算。

由於輸入的資料格式是固定的,所以在處理方面相對就簡單很多。



解題步驟:

宣告整數n,輸入測資個數。

宣告字串str,讓使用者輸入測資。

宣告整數sum1,存放三個字母的總和;宣告整數sum2,存放後三位數字的值。

for迴圈,次數為n次。

抓字串前三位字元( str.chartAt() ),轉為ASCII碼後,減掉A的ASCII碼( str.charAt() - 'A' )做運算。(因為一定是字母所以可以直接抓字元);並將結果存放於sum1。

以A的ASCII碼作為基準,將每個字母的ASCII碼減掉A的ASCII碼,其值就等於編號。
    [ A = 65 - 65 = 0;B = 66 - 65 = 1;......Z = 90 - 65 = 25 ]

這裡有用到substring的method,用來回傳指定範圍內的字串。所以我就用它,將字串第四位候的字串全部抓回來( str.substring(4) ),並轉為整數 ( Integer.parseInt() );存放到sum2。

接下來進入判斷式,判斷兩數相減的絕對值是否大於100:

如果是,則輸出not nice;如果否,則輸出nice。

最後記得將sum1和sum2初始化。



EX:

1
ABC-0123

n = 1。

str = ABC-0123。

sum1+=( 'A' - 'A' )*26*26 = (65-65)*26*26 = 0
sum1+=( 'B' - 'A' )*26 = (66-65)*26 = 26
sum1+=( 'C' - 'A' ) = (67-65) = 2

此時,sum1的值為26+2 = 28。

sum2+=Integer.parseInt( "0123" ),sum2 = 123。

if( |28 - 123| >100 ),95 > 100,不符合。

進入else,輸出nice。


By   小K

沒有留言:

張貼留言