T03 手机键盘
?手機鍵盤布局
#include<iostream>using namespace std; int key[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(void) {char pre, next;int sum = 0;cin >> pre;sum += key[pre - 'a'];while (::scanf("%c", &next) != EOF) {if (next == '\n') {cout << sum << '\n';sum = 0;cin >> pre;sum += key[pre - 'a'];continue;}if (key[next - 'a'] - key[pre - 'a'] == next - pre || pre == next) {sum = sum + 2 + key[next - 'a'];} else {sum = sum + key[next - 'a'];}pre = next;}}思想是將單個字母要按的次數整合成一個數組。用兩個指針依次讀取輸入的字符,如果后字符對應的次數與前字符對應的次數的差就是兩字符的差,那么就說明在同一個按鍵上(無需取絕對值,如果在同一按鍵上,要么同正,要么同負)
為了將字符與int數組對應起來,用ascⅡ碼來定位,即該字符-‘a’
因為支持多次輸入,我的方法是用scanf接收,如果接收的是換行符,那么就將次數清零,將下一個接收的字符賦給pre,然后continue,如果后面沒有內容了,會在while處跳出。
總結
- 上一篇: python mysql 双主_keep
- 下一篇: 163的邮箱不错