1. 程式人生 > >Night at the Museum

Night at the Museum

這裡有一個密碼鎖,正上方是指標的位置,每次需要旋轉這個鎖,讓某一個字母對準指標才能夠進行下一步,怎麼可以轉動最小步數,讓指標得到想要的字串。比如 a -> c   最少需要擰動鎖 2 次.;一開始指標指著 a,輸出想要得到某一個字串最少需要擰多少下?

Input

給定一個字串,小寫字母

Output

輸出一個整數,代表最少擰動次數.

Sample Input

zeus

Sample Output

18

Hint

比如要得到 zeus, 一開始在 a

  1.  'a' to 'z' (1 步),
  2.  'z' to 'e' (5 步),
  3.  'e' to 'u' (10 步),
  4.  'u' to 's' (2 步).

總共 1 + 5 + 10 + 2 = 18 步

 

這道題的思路並不是太難,但是我在做的時候用了很長的時間。

原因就是我沒有弄清楚字元往整形上的轉變。

'a'對應的ASCII碼值為49,'z'對應的ASCII碼值為74

如果說第一個數比較大,那麼第一個數減去第二個數就是正,反之為負數

如果說第一個數比較小,那麼第一個數減去第二個數就是負,反之為正數

下面的是C的AC程式碼

#include<stdio.h>
#include<string.h>
int main()
{
    char a[1000];
    int b[1000];
    scanf("%s",a);
    int l=strlen(a);
    for(int i=1;i<l+1;++i)
    {
       b[i]=a[i-1]-'0';
    }
    b[0]='a'-'0';
    l+=1;
    int num=0;
    for(int i=1;i<l;++i)
    {
        if(b[i-1]<b[i])
        {
            if(b[i-1]-b[i]+26<b[i]-b[i-1])
                num+=b[i-1]-b[i]+26;
            else
                num+=b[i]-b[i-1];
        }
        else
        {
            if(b[i-1]-b[i]<b[i]-b[i-1]+26)
                num+=b[i-1]-b[i];
            else
                num+=b[i]-b[i-1]+26;
        }
    }
    printf("%d\n",num);
    return 0;
}