【背景知識】聽實驗室師兄說的一道華爲的面試題目。(具體真實來源不究,若題目來源有侵權請告知,思路屬個人陋見,僅供學習)
【問題描述】輸入一個長度不大於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了。
如有轉載,請私信博主並註明出處。