c++開發工程師京東 2018秋招程式設計題 (**後續更新。。。)
將乙個數n的各數字分成兩部分,兩部分之和相等,則稱這個數為神奇數。比如242分成[2,2]、[4]。輸入乙個範圍[l, r],輸出這個範圍內神奇數的個數。示例:
輸入:解析:1,50
輸出:
4
判斷乙個數是否是神奇數,首先應該獲取其各個數字,按照神奇數的定義,需要將數字分成兩部分,且兩部分元素和相等,因此所有數字的和sum必為偶數。如果不是偶數,則必然不是神奇數。c++**實現因此,這個問題就演變成,在中尋找乙個子集,使得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。
#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在無限數列的索引,則有:c++**實現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 即為結果。
下面這個**會超時。
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。然後使用回溯法遍歷陣列,檢視陣列...