華爲面試題-字典序

【背景知識】聽實驗室師兄說的一道華爲的面試題目。(具體真實來源不究,若題目來源有侵權請告知,思路屬個人陋見,僅供學習)

【問題描述】輸入一個長度不大於4的字符串(只包含a~y共25個字符),求該字符串對應於字典序的序號,序號從0開始。(可能表述有些不太清楚)

【輸入樣例】a,aa,aaa,aaaa,aaab,aaay,aab,ab,

【輸出樣例】0,1,2,3,4,27,28,652.

代碼

#include<iostream>
#include<cstdlib>
#include<stdio.h>
#include<memory.h>
#include<string>
#include<cmath>

#define f1(x) ((25*25*25+25*25+25+1)*(x-'a')+0)
#define f2(x) ((25*25+25+1)*(x-'a')+1)
#define f3(x) ((25+1)*(x-'a')+1)
#define f4(x) ((1)*(x-'a')+1)

using namespace std;
int f(int i,char ch)
{
    switch(i){
    case 1:
        return f1(ch);
    case 2:
        return f2(ch);
    case 3:
        return f3(ch);
    case 4:
        return f4(ch);
    }
}
int main()
{
    char inString[5];
    while(cin>>inString){
        int len = strlen(inString);
        int num = 0;
        for(int i = 0; i < len; ++i)
            num += f(i+1,inString[i]);
        cout<<num<<endl;
    }
    return 0;
}

一年多沒有寫C++的代碼了,代碼寫的很渣,見諒。

公式總結

第一位:(25^3+25^2+25^1+25^0)('x' - 'a')+0

第二位:(25^2+25^1+25^0)('x' - 'a')+1

第三位:(25^1+25^0)('x' - 'a')+1

第四位:(25^0)('x' - 'a')+1

將四位求和可得字符串的序列數。

總公式爲: 


注:n爲字符位數(前面說的第一位在這是第3位,第二位是第2位,第三位是第1位,第四位是第0位,有點亂。。)

'x'爲第n位的輸入字符的ASCII值,‘a’爲字符a的ASCII值

mean(‘a'’)意味該位的a字符是從0開始計數還是從1開始計數(除第3位爲0外,均爲1) ps:如果題目從1開始計算序列的話,每一位就都取1了。


所有字符串對應的序列號


如有轉載,請私信博主並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章