华为面试题-字典序

来源:互联网 发布:ccer数据库 豆掰 编辑:程序博客网 时间:2024/06/10 19:04

【背景知识】听实验室师兄说的一道华为的面试题目。(具体真实来源不究,若题目来源有侵权请告知,思路属个人陋见,仅供学习)

【问题描述】输入一个长度不大于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了。


所有字符串对应的序列号


如有转载,请私信博主并注明出处。

原创粉丝点击