百度面試題d n

2021-06-21 11:23:29 字數 1000 閱讀 7242

1、找到滿足條件的陣列

給定函式d(n)=n+n的各位之和,n為正整數,如d(78)=78+7+8=93。這樣這個函式可以看成乙個生成器,如93可以看成由78生成。

定義數a:數a找不到乙個數b可以由d(b)=a,即a不能由其他數生成。現在要寫程式,找出1至10000裡的所有符合數a定義的數。

思路:宣告乙個位的集合,全部初始化為0,如果某個資料可以由d(n)生成,則置為1,然後將其中位是0 的資料輸出即是所求

// d(n).cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include#includeusing namespace std;

int getbitsum(int data)

else

; sprintf(buf,"%d",data);

int m=strlen(buf);

int datawithoutmax=0;

sscanf(&buf[1],"%d",&datawithoutmax);

return (data/(pow((float)10,m-1))+getbitsum(datawithoutmax)); }}

int _tmain(int argc, _tchar* argv)

for(int i=0;i<10000;i++)

{ if(m_bit[i]==0)

{ cout<

這裡面使用了遞迴的思想來獲取乙個數的各個位上的數的代數和,其主要原理就是乙個資料型別的轉換,將int型轉換成char*型別,獲取該字元陣列長度n,然後求得10的n-1次方,由此獲得最高位上的數值,之後就是要去除掉原數值的最高位,此過程就比較簡單了,只需使用sscanf函式,將char*型別資料的第二位位址傳遞進去,即可獲得去掉最高位之後的資料,然後進行遞迴,知道獲取個位上的資料,這樣就獲得了所有位上資料的和

ps:該過程,使用了多餘的記憶體,因而避免了使用迴圈,也就是說用空間換取了時間,可總覺得應該還有完善的地方,只是想不太起來了...

百度面試題

有一根27厘公尺的細木桿,在第3厘公尺 7厘公尺 11厘公尺 17厘公尺 23厘公尺這五個位置上各有乙隻螞蟻。木桿很細,不能同時通過乙隻螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,但不會後退。當任意兩隻螞蟻碰頭時,兩隻螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一厘公尺的距...

百度面試題

一 選擇題 15分 共10題 1.任何乙個基於 比較 的內部排序的演算法,若對6個元素進行排序,則在最壞情況下所需的比較次數至少為 a 10 b 11 c 21 d 36 2.關係模型有三類完整性約束,定義外來鍵實現的是 完整性.a.實體完整性 b.參照完整性 c.使用者定義的完整性 d.實體完整性...

百度面試題

1.乙個int陣列,裡面資料無任何限制,要求求出所有這樣的數a i 其左邊的數都小於等於它,右邊的數都大於等於它。能否只用乙個額外陣列和少量其它空間實現。2.乙個檔案,內含一千萬行字串,每個字串在1k以內,要求找出所有相反的串對,如abc和cba。當時怎麼想的忘記了,現在重新思考一下,檔案的大小上限...