2010年4月16日 星期五

Problem 11530 SMS Typing,按下的次數

現在有一手機的按鈕如下表:
---------------------
| | abc | def |
---------------------
| ghi | jkl | mno |
---------------------
| pqrs | tuv | wxyz |
---------------------
| | sp | |
---------------------

接著給你一段簡訊內容,問你需要按鍵需要按幾次。例如 akfz,需要按下 10 次按鍵方能打出這四個字,因為 a 排在第 1 個、k 排在第 2 個、f 排在第 3 個、z 排在第 4 個,所以 1 + 2 + 3 + 4 = 10,因此 10 次。
首先建立一個陣列 keyNum,是對應打入的字轉換整數以累加,再用一 Counter 函式來實作, C 語言程式碼如下:
int keyNum[26] = {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,
3,4,1,2,3,1,2,3,4};
int count;
char str[101];
void Counter(char ch)
{
if (ch == ' ') count ++;
count += keyNum[ch - 'a'];
}

最後主程式只需 gets() 字串,再一個一個傳入 Counter 函式,最後印出就好,C 語言程式碼如下:
for (j = 1; j <= n; j ++)
{
gets(str);
count = 0;
for (i = 0; str[i]; i ++)
Counter(str[i]);
printf("Case #%d: %d\n",j , count);
}

By David.K

p11530題目連結
回ACM題庫目錄
回首頁

沒有留言: