• 九度OJ 1079:手机键盘 (翻译)


    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:2279

    解决:1233

    题目描述:
    按照手机键盘输入字母的方式,计算所花费的时间
    如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。
    如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需要按6下
    如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按c。
    现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。
    现在给出一串字符,需要计算出它所需要花费的时间。
    输入:

    一个长度不大于100的字符串,其中只有手机按键上有的小写字母

    输出:
    输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间
    样例输入:
    bob
    www
    样例输出:
    7
    7
    来源:
    2008年清华大学计算机研究生机试真题

    思路:

    翻译题,如果是C++也可以用map。

    比较简单,直接看代码就行。


    代码:

    #include <stdio.h>
    #include <string.h>
     
    #define M 100
     
    int id[26];
     
    void init()
    {
        char i;
        for (i='a'; i<='c'; i++)
            id[i-'a'] = 'a';
        for (i='d'; i<='f'; i++)
            id[i-'a'] = 'd';
        for (i='g'; i<='i'; i++)
            id[i-'a'] = 'g';
        for (i='j'; i<='l'; i++)
            id[i-'a'] = 'j';
        for (i='m'; i<='o'; i++)
            id[i-'a'] = 'm';
        for (i='p'; i<='s'; i++)
            id[i-'a'] = 'p';
        for (i='t'; i<='v'; i++)
            id[i-'a'] = 't';
        for (i='w'; i<='z'; i++)
            id[i-'a'] = 'w';
    }
     
    char find(char c)
    {
        return id[c-'a'];
    }
     
    int sameid(char c1, char c2)
    {
        return (find(c1) == find(c2));
    }
     
    int main(void)
    {
        int n, i;
        char s[M+1];
        int count;
     
        init();
     
        while (scanf("%s", s) != EOF)
        {
            n = strlen(s);
            count = 0;
            for (i=0; i<n; i++)
            {
                if (i != 0)
                {
                    if (sameid(s[i], s[i-1]))
                        count += 2;
                }
                count += s[i]-find(s[i])+1;
            }
            printf("%d
    ", count);
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1079
        User: liangrx06
        Language: C
        Result: Accepted
        Time:10 ms
        Memory:912 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    TextView-setCompondDrawables用法
    android 相对布局RelativeLayout中的一些属性的使用和实例
    登录时旋转等待效果
    使用slidingmeu_actionbarsherlock_lib的问题和The hierarchy of the type MainActivity is inconsistent
    ActionBarSherlock SlidingMenu整合,解决SlidingMenu example的getSupportActionBar()方法不能用问题
    String,StringBuffer和StringBuilder的区别
    File.separator使用
    Android常用异步任务执行方法
    adb server is out of date. killing...
    adb shell root
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083953.html
Copyright © 2020-2023  润新知