携帯電話のキーボード(マシンでのTsinghuaの再テスト)

序文:

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;
}

おすすめ

転載: blog.csdn.net/weixin_44897291/article/details/112740063