關於搜狗網上測評試題的解法(GBK的)。

2021-05-28 15:18:04 字數 1041 閱讀 8249

// sad.cpp : 定義控制台應用程式的入口點。

#include "stdafx.h"

#include #include #include "stdint.h"

#include #include void encode(const void* raw_in, void* raw_out, uint32_t password, size_t len) }

/*uint8_t c = ((a<<1)^seed)&0xfe;和uint8_t a = ( in[i] ^ seed ) >> 1; 的轉化

運用c=a^b;a=c^b;的原理,a = ( in[i] ^ seed ) >> 1可寫為a << 1= ( in[i] ^ seed ) ,又可寫為

in[i]= ((a << 1) ^ seed) ),反過來時不能直接用in[i],先用c取出來,即為

c= ((a << 1) ^ seed) ),又因為a = ( in[i] ^ seed ) >> 1相當於右移了1位,即這1位(最低的1位被移出)的資料無效了,所以c = ((a<<1)^seed)&0xfe中的0xfe相當於去除無效位(最低一位),b的計算方法和這裡相同

*/void decode(const void* raw_in, void* raw_out, uint32_t password, size_t len) }

int main()

; uint8_t buf2[100] = {};

const uint32_t password = 0x2dc8249eu;

const size_t len = sizeof(buf1);

decode(buf1, buf2, password, len);

printf("%s\n", buf2);

}

執行結果是:搜狗輸入法承擔了數億中國人所有的文字錄入的任務!!

下面是執行效果圖:

關於面試題的網上資料整理

鍊錶反轉 單向鍊錶的反轉是乙個經常被問到的乙個面試題,也是乙個非常基礎的問題。比如乙個鍊錶是這樣的 1 2 3 4 5 通過反轉後成為5 4 3 2 1。struct linka void reverse linka head head next null head pre 還有一種利用遞迴的方法。...

9月,關於美團,百度,搜狗的Python面試題

津貼兌換 津貼序列,有連續兩個一樣的x元的津貼可以變成x 1 這樣的最後津貼序列是?輸入 序列長度n,序列a 輸出 經過變換的序列 列子 input 5 1,1,1,1,1 output 3 n 5 a 1,1,1,1,1 sum con 0 con 1 while con 0 con 0 pre ...

關於騰訊這道陣列面試題,這可能是最笨的解法

給你10分鐘時間,根據上排給出十個數,在其下排填出對應的十個數要求下排每個數都是先前上排那十個數在下排出現的次數。上排的十個數如下 0,1,2,3,4,5,6,7,8,9 舉乙個例子,數值 0,1,2,3,4,5,6,7,8,9 分配 6,2,1,0,0,0,1,0,0,0 0在下排出現了6次,1在...