清華機試oj——手機按鍵

JachyIsMe發表於2018-05-26

題目描述

按照手機鍵盤輸入字母的方式,計算所花費的時間如:a,b,c都在“1”鍵上,輸入a只需要按一次,輸入c需要連續按三次。如果連續兩個字元不在同一個按鍵上,則可直接按,如:ad需要按兩下,kz需要按6下如果連續兩字元在同一個按鍵上,則兩個按鍵之間需要等一段時間,如ac,在按了a之後,需要等一會兒才能按c。現在假設每按一次需要花費一個時間段,等待時間需要花費兩個時間段。現在給出一串字元,需要計算出它所需要花費的時間。


輸入描述:

一個長度不大於100的字串,其中只有手機按鍵上有的小寫字母

輸出描述:

輸入可能包括多組資料,對於每組資料,輸出按出Input所給字串所需要的時間


示例1

輸入

bob
www

輸出

7
7


解題思路

首先使用兩個陣列,一個來記錄不考慮連不連續的情況下每個字母應該按幾下,另一個陣列用來記錄哪些字母使位於相同的按鍵上的。然後遍歷字串,既要考慮當前的字母需要按幾下,還要考慮和上一個字母是否在同一個按鍵,所以還需要一個char型的中間變數儲存上一個字母。


程式碼實現

#include<bits/stdc++.h>
using namespace std;

int eachtime[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 group[26] = {1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,6,7,7,7,8,8,8,8};//一共八組,用來判斷是否在一個按鈕上
int main(){
    string str;
    while(cin >> str){
        int time = 0;
        char pre = '*';//記錄上一個字元,初始化為26字母以外的隨便一個字元
        for(int i = 0; i < str.length(); i++){
            if(group[str[i]-'a'] == group[pre-'a']){
                time += 2;
            }
            time += eachtime[str[i]-'a'];
            pre = str[i];
        }
        cout << time << endl;
    }
    return 0;
}

繼續加油吧ヾ(◍°∇°◍)ノ゙


相關文章