京東筆試題 進製均值

2021-08-07 06:46:05 字數 1368 閱讀 4484

儘管是乙個cs專業的學生,小b的數學基礎很好並對數值計算有著特別的興趣,喜歡用電腦程式來解決數學問題,現在,她正在玩乙個數值變換的遊戲。她發現計算機中經常用不同的進製表示乙個數,如十進位制數123表達為16進製制時只包含兩位數7、11(b),用八進位制表示為三位數1、7、3,按不同進製表達時,各個位數的和也不同,如上述例子中十六進製制和八進位制中各位數的和分別是18和11,。 小b感興趣的是,乙個數a如果按2到a-1進製表達時,各個位數之和的均值是多少?她希望你能幫她解決這個問題? 所有的計算均基於十進位制進行,結果也用十進位制表示為不可約簡的分數形式。

題目很長,這大概就是筆試題的特點,墨跡一堆,就看你能不能理解。大概的意思就是給你乙個整數n,讓你將n分別轉化為2進製、3進製……n-1進製,然後把每一位的數字相加,對這幾種進製求均值。假設t(n,x)為將整數n轉化為x進製後的各位數字和,則answer = [t(n,x=2)+t(n,x=3)+……+t(n,x=n-1)] / (n-1-1)。

#include 

#include

#include

using

namespace

std;

// 求整數x轉換成n進製後各位數字的和

int everybytesum(int x, int n, int &everysum)

else

return everysum;

}int main()

string ans; // 答案要求輸出分數形式,所以使用字串

int len = x - 2;

// 進行分式化簡

if (allsum % len == 0)

for(int i = 2; i <= len; i++)

}// 將結果轉化為分式後輸出

ans = to_string(allsum);

ans += "/";

ans += to_string(len);

cout

<< ans << endl;

return

0;}

在這裡分式化簡的部分不夠有普遍適用性。理論上應該先求取allsum和len的最大公約數之後,分別除掉最大公約數即可。在規定時間內時間有點緊張,一時掀不起來求最大公約數的演算法,所以採用了上面化簡的不優美的方法。所以在這裡貼一下求最大公約數的演算法,希望下次需要的時候能夠信手拈來。

最大公約數的求取:

方法一:輾轉相除法

int maxcommondivisor(int a, int b)
方法二:輾轉相減法

int maxcommondivisor(int a, int b)
方法三:暴力求解(如題目解答中化解部分)

京東筆試題

剛才看到一篇京東筆試題,又見無聊題,俗稱智力題,下面我們就看看。1.說一架飛機可以飛50公尺,但是現在需要其飛100公尺,飛機之間可以互相加油。問是要飛完一共需要派出幾架飛機 首先飛機快飛到25公尺處時派出一架飛機從起點起飛,同時到達25公尺處,加完油後可以可以飛到75公尺,快到75公尺時從終點派出...

2020 08 06 京東筆試題

題目描述 x星人的基因由a b c d e五種不同的結構組合而成。如果兩個性別不同的x星人的基因序列相似度大於50 按照x星的法律他們是禁止結婚的,等於50 據說還是可以的。那麼基因的相似度怎麼計算呢?分別從兩個人身上取長度均為n的基因片段,如果它們的最長公共子串行 注意,最長公共子串行不需要連續 ...

京東筆試題總結

1.談談優雅降級與漸進增強的區別。漸進增強 progressive enhancement 針對低版本瀏覽器進行構建頁面,保證最基本的功能,然後再針對高階瀏覽器進行效果 互動等改進和追加功能達到更好的使用者體驗。優雅降級 graceful degradation 一開始就構建完整的功能,然後再針對低...