編碼-騰訊機(jī)試

假定一種編碼的編碼范圍是a-y的25個(gè)字母,從一位到四位的編碼,如果我們把該編碼按字典序排序,形成一個(gè)數(shù)組如下:
a,aa,aaa,aaaa,aaab,aaac,... ...,b,ba,baa,baaa,baab,baac,... ...,yyyw,yyyx,yyyy;
其中a的Index為0,aa的Index為1,aaa的Index為2,以此類推。
編寫一個(gè)函數(shù),輸出給定編碼對(duì)應(yīng)Index。如:baca --> 16331.

#include <stdio.h>
#include <string.h>

#define N3 1
#define N2 25
#define N1 (25 * 25)
#define N0 (25 * 25 * 25)

#define C3 N3
#define C2 (N2 + N3)
#define C1 (N1 + N2 + N3)
#define C0 (N0 + N1 + N2 + N3)

int main()
{
    char code[11][5] = {"a", "aa", "aaa", "aaaa", "ab", "aba", "b", "ba", "bac", "baca", "yyyy"};
    
    for(int i = 0; i < 11; i++){
        int index = 0;
        switch(strlen(code[i])){
            case 1: index = C0 * (code[i][0] - 'a'); break;
            case 2: index = C0 * (code[i][0] - 'a') + C1 * (code[i][1] - 'a') + 1; break;
            case 3: index = C0 * (code[i][0] - 'a') + C1 * (code[i][1] - 'a') + C2 * (code[i][2] - 'a') + 2; break;
            case 4: index = C0 * (code[i][0] - 'a') + C1 * (code[i][1] - 'a') + C2 * (code[i][2] - 'a') + C3 * (code[i][3] - 'a') + 3; break;
            default: break;
        }
        printf("code = %-4s, strlen =%2d, index =%7d\n", code[i], strlen(code[i]), index);
    }
    return 0;   
}

結(jié)果顯示如下:

code = a   , strlen = 1, index =      0
code = aa  , strlen = 2, index =      1
code = aaa , strlen = 3, index =      2
code = aaaa, strlen = 4, index =      3
code = ab  , strlen = 2, index =    652
code = aba , strlen = 3, index =    653
code = b   , strlen = 1, index =  16276
code = ba  , strlen = 2, index =  16277
code = bac , strlen = 3, index =  16330
code = baca, strlen = 4, index =  16331
code = yyyy, strlen = 4, index = 406899

完整截圖:

編碼-騰訊機(jī)試題.png

改進(jìn)版代碼:

#include <stdio.h>
#include <string.h>

#define N3 1
#define N2 25
#define N1 (25 * 25)
#define N0 (25 * 25 * 25)

#define C3 N3
#define C2 (N2 + N3)
#define C1 (N1 + N2 + N3)
#define C0 (N0 + N1 + N2 + N3)

int main()
{
    char code[11][5] = {"a", "aa", "aaa", "aaaa", "ab", "aba", "b", "ba", "bac", "baca", "yyyy"};
    
    for(int i = 0; i < 11; i++){
        int index = 0;
        switch(strlen(code[i])){
            case 4: index += C3 * (code[i][3] - 'a') + 1;
            case 3: index += C2 * (code[i][2] - 'a') + 1;
            case 2: index += C1 * (code[i][1] - 'a') + 1;
            case 1: index += C0 * (code[i][0] - 'a');
        /*
            case 1: index = C0 * (code[i][0] - 'a'); break;
            case 2: index = C0 * (code[i][0] - 'a') + C1 * (code[i][1] - 'a') + 1; break;
            case 3: index = C0 * (code[i][0] - 'a') + C1 * (code[i][1] - 'a') + C2 * (code[i][2] - 'a') + 2; break;
            case 4: index = C0 * (code[i][0] - 'a') + C1 * (code[i][1] - 'a') + C2 * (code[i][2] - 'a') + C3 * (code[i][3] - 'a') + 3; break;
        */
            default: break;
        }
        printf("code = %-4s, strlen =%2d, index =%7d\n", code[i], strlen(code[i]), index);
    }
    return 0;   
}

改進(jìn)版完整截圖:

改進(jìn)版完整截圖.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,045評(píng)論 25 709
  • ping error: Destination off-link but no route作者 codercjg ...
    codercjg閱讀 1,191評(píng)論 0 1
  • 之前積累了XSS 有一段時(shí)間,因?yàn)槟壳伴_始了一件有趣的工程,需要整合非常多的知識(shí),其中Web 安全這一塊出現(xiàn)最多的...
    刀背藏身閱讀 9,561評(píng)論 0 16
  • 假定一種編碼的編碼范圍是a ~ y的25個(gè)字母,從1位到4位的編碼,如果我們把該編碼按字典序排序,形成一個(gè)數(shù)組如下...
    極速魔法閱讀 412評(píng)論 0 0
  • 2015.3.6細(xì)雨蒙蒙 好冷好冷好冷好冷好冷好冷~桂林6℃雨,成都6℃晴。好冷!都說十五的月亮十六圓,也還是沒見...
    羊愛吃甜食閱讀 252評(píng)論 0 2

友情鏈接更多精彩內(nèi)容