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
沒有留言:
張貼留言