序文:
21.再テストに参加できるかどうかに関係なく、道路に書かれたゴミコードを記録します。もともと「AlgorithmNotes」をかじったのですが、やりすぎたので、Kingway ComputerTestGuideに変更しました。
タイトル説明:
携帯電話のキーボードで文字を入力する方法に従って、次のように費やした時間を計算します。a、b、cはすべて「1」キーで、入力aは1回押すだけで、入力cは3回続けて押す必要があります。2つの連続する文字が同じボタン上にない場合は、直接押すことができます。たとえば、adを2回押す必要があり、kzを6回押す必要があります。2つの連続する文字が同じボタン上にある場合は、2つのボタンの間でしばらく待つ必要があります。 acなど、aを押した後、cを押すまでしばらく待つ必要があります。ここで、各プレスに1つの時間がかかり、待機時間が2つの期間にかかるとします。文字列が与えられたら、かかる時間を計算する必要があります。
説明を入力してください
電話キーの小文字のみが含まれる100以下の文字列
出力の説明:
入力には複数のデータセットが含まれる場合があります。データセットごとに、出力が入力で指定された文字列を押すのに必要な時間
回答
#include<stdio.h>
#include<cstring>
int keytab[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 main()
{
char str[101];
for (int i = 0; i < 101; i++)
str[i] = NULL;
while (scanf("%s", str) != EOF) {
int time = 0;
for (int i = 0; i < strlen(str); i++) {
time += keytab[str[i] - 'a'];
if (i != 0 && ((str[i] - str[i - 1]) == (keytab[str[i]-'a'] - keytab[str[i - 1]-'a'])))
time = time + 2 ;
}
printf("%d\n", time);
for (int i = 0; i < 101; i++)
str[i] = NULL;
}
return 0;
}