京東2018秋招程式設計題

2021-08-07 22:44:02 字數 1908 閱讀 2142

c++開發工程師京東 2018秋招程式設計題 (**後續更新。。。)

將乙個數n的各數字分成兩部分,兩部分之和相等,則稱這個數為神奇數。比如242分成[2,2]、[4]。輸入乙個範圍[l, r],輸出這個範圍內神奇數的個數。

示例:

輸入:

1,50

輸出:

4

解析:

判斷乙個數是否是神奇數,首先應該獲取其各個數字,按照神奇數的定義,需要將數字分成兩部分,且兩部分元素和相等,因此所有數字的和sum必為偶數。如果不是偶數,則必然不是神奇數

因此,這個問題就演變成,在中尋找乙個子集,使得sum = sum/2

顯然,這是乙個0-1揹包問題。可以用回溯法、動態規劃

這裡使用動態規劃,用dp[i][j]表示子陣列的元素和是否等於j

初始dp[i][0] = true (所有元素都不選,和為j)

如果不選擇第i個元素,則dp[i][j] = dp[i-1][j]

如果選擇第i個元素,則dp[i][j] = dp[i-1][j-num[i]]

因此,dp[i][j] = dp[i-1][j] || dp[i-1][j-num[i]]

dp[n][newsum]即表示是否可以找到乙個子集,其元素和為sum/2。

c++**實現

#include 

#include

using

namespace

std;

int l=0,r=0;

//動態規劃

bool canpartition(vector

&dicts,int n,int sum)

}return dp[n][sum];

}bool issqs(int num)

if(sum & 1)

return

false;

return canpartition(dicts,k,sum>>1);

}int sqs()

return cnt;

}int main()

有乙個無限數列,,數字n在數列中出現n次,且是連續的。輸入乙個整數n,輸出第n項數字。n的範圍為[1,10^18]。

示例:

輸入:

169

輸出:

18

解析:

用dp[i]表示數字i在無限數列的索引,則有:

dp[1] = 1

dp[2] = 3

dp[3] = 6

dp[4] = 10

dp[5] = 15

… dp[n] = n*(n+1)/2

因此判斷第n項的數字,應該找到dp[i]<= n <=dp[i+1],

這裡的i 或者 i+1 即為結果。

c++**實現

下面這個**會超時。

int getindex(long

long& n)

return last+1;

}int main()

滴滴2018秋招程式設計題

滴滴 2018秋招 程式設計題 醜數的定義是,只包含因子2 3和5的數稱作醜數。比如6和8是醜數,14不是醜數,因為含有因子7。輸入乙個整數n,輸出第n個醜數。我們認為第乙個醜數是1。解析 根據醜數的定義,我們可以知道醜數可以由另外乙個醜數乘以2,3或者5得到。因此我們建立乙個陣列,裡面的數字是排好...

2018秋招 京東筆試題 求冪

東東對冪運算很感興趣,在學習的過程中東東發現了一些有趣的性質 9 3 27 2,2 10 32 2 東東對這個性質充滿了好奇,東東現在給出乙個整數n,希望你能幫助他求出滿足 a b c d 1 a,b,c,d n 的式子有多少個。例如當n 2 1 1 1 1 1 1 1 2 1 2 1 1 1 2 ...

京東2018秋招c 崗 神奇數

題意大概是 乙個數比如242,把所有數字分成兩組,而且兩組的和相等,那麼這個數就是神奇數,此時242,能夠分成和,所以242是神奇數。題目要求輸入n和m求 n,m 區間內神奇數的個數。思路 對於任意乙個數字,將每一位上的數字儲存到陣列裡,並求所有位上的數字的和sum。然後使用回溯法遍歷陣列,檢視陣列...