計算機考研機試之手機鍵盤--java/C++
阿新 • • 發佈:2018-12-16
題目如下:
按照手機鍵盤輸入字母的方式,計算所花費的時間 如:a,b,c都在“1”鍵上,輸入a只需要按一次,輸入c需要連續按三次。 如果連續兩個字元不在同一個按鍵上,則可直接按,如:ad需要按兩下,kz需要按6下 如果連續兩字元在同一個按鍵上,則兩個按鍵之間需要等一段時間,如ac,在按了a之後,需要等一會兒才能按c。 現在假設每按一次需要花費一個時間段,等待時間需要花費兩個時間段。 現在給出一串字元,需要計算出它所需要花費的時間。
輸入描述:
一個長度不大於100的字串,其中只有手機按鍵上有的小寫字母
輸出描述:
輸入可能包括多組資料,對於每組資料,輸出按出Input所給字串所需要的時間
java實現:
import java.io.*; import java.util.*; public class Main{ public static void main(String [] args){ Scanner sc = new Scanner(System.in); while(sc.hasNextLine()){ String s=sc.nextLine(); char []c=s.toCharArray(); int sum=num(c[0]); for(int i=1;i<c.length;i++){ if(judge(c[i-1])==judge(c[i])){ sum=sum+2; } sum+=num(c[i]); } System.out.println(sum); } } static int judge(char c){ int n=c-'a'; if(n>21) return 7; else if(n>18) return 6; else if(n>14) return 5; else return (c-'a')/3; } static int num(char c){ int n=c-'a'; if(n<18) return n%3+1; else if(n==18||n==25) return 4; else if(n==21||n==24) return 3; else return n%3; } }
C++實現:
#include<iostream> #include<cstring> using namespace std; int num(char c){ int n=c-'a'; if(n<18) return n%3+1; else if(n==18||n==25) return 4; else if(n==21||n==24) return 3; else return n%3; } int judge(char c){ int n=c-'a'; if(n>21) return 7; else if(n>18) return 6; else if(n>14) return 5; else return (c-'a')/3; } int main(){ char c[100]; while(scanf("%s",c)!=EOF){ int i=0; int sum=num(c[0]); for(i=1;c[i]!='\0';i++){ //注意此處輸入字串和字串轉換為字元陣列我的技巧及如何判定迴圈的終止條件 if(judge(c[i])==judge(c[i-1])){ sum+=2; } sum+=num(c[i]); } cout<<sum<<endl; } }