東華OJ寂寞的數

2021-10-10 21:46:32 字數 1504 閱讀 9091

問題描述 :

道德經曰:一生二,二生三,三生萬物。

對於任意正整數n,我們定義d(n)的值為為n加上組成n的各個數字的和。例如,d(23)=23+2+3=28,d(1481)=1481+1+4+8+1=1495。

因此,給定了任意乙個n作為起點,你可以構造如下乙個遞增序列:n,d(n),d(d(n)),d(d(d(n)))…例如,從33開始的遞增序列為:

33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, …

我們把n叫做d(n)的生成元,在上面的數列中,33是39的生成元,39是51的生成元,等等。有一些數字甚至可以有兩個生成元,比如101,可以由91和100生成。但也有一些數字沒有任何生成元,如42。我們把這樣的數字稱為寂寞的數字。

輸入說明 :

一行,乙個正整數n。

n<=10000

輸出說明 :

按照公升序輸出小於n的所有寂寞的數字,每行乙個。

standard input:

standard output:13

57920

31

#include

#include

using namespace std;

intmain()

;for

(int i=

1;i<=n;i++

)int k=0;

for(

int i=

1;i<=n;i++

) temp/=10

;}if(flag)

num[k++

]=sum;

}for

(int i=

0;iif(flag)

}return0;

}

一樣的問題,因為不想自己太多人工計算,所以初次就只會代給出的案例和較小的進行檢驗。結果就是容易出錯。汗。

在源**標註錯的錯誤地方。設計的原意是若找出的非寂寞數已經超出給出的n,就不用繼續運算儲存了。減少時間。結果卻是還沒有遍歷完所有的非寂寞數就會達成退出輸入迴圈。(如n=90,在i=77時sum就會超過90從而退出,但是i=81時,sum=90,所以90不能輸出。結果是錯誤輸出了。)

把退出條件判斷進行更改,不需要sum>n就退出所有迴圈,而是退出內層迴圈,繼續下一次迴圈。

#include

#include

using

namespace std;

intmain()

;for

(int i=

1;i<=n;i++

)int k=0;

for(

int i=

1;i<=n;i++

) temp/=10

;}if(

!flag)

}for

(int i=

0;iif(flag)

}return0;

}

東華OJ 10 怪數

問題描述 尋找怪數 有一種奇怪的自然數,它的比其本身小的所有因子之和等於它本身,例如 6 1 2 3,其中1 2 3都是6的因子,程式設計找出整數n之內的所有怪數。輸入說明 輸入乙個整數n 10 n 10000 在行首和行尾沒有多餘的空格。輸出說明 輸出n之內 n 的所有怪數,每一行輸出乙個整數。注...

東華複試OJ 41 冰雹數

任意給定乙個大於1的正整數n,如果是偶數,執行 n 2 如果是大於1的奇數,執行 n 3 1 生成的新的數字再執行同樣的動作,迴圈往復。通過觀察發現,這個數字會一會兒上公升到很高,一會兒又降落下來。就這樣起起落落的,但最終必會落到 1 這有點像小冰雹粒子在冰雹雲中翻滾增長的樣子。比如n 9 9,28...

東華複試OJ 43 醜數

對於一給定的素數集合 s 來考慮那些質因數全部屬於s 的數的集合。這個集合包括,p1,p1p2 即p1乘以p2 p1p3,和 p1p2p3 還有其它很多 這是個對於乙個集合s的醜數集合。注意 我們不認為1 是乙個醜數。你的工作是對於輸入的集合s去尋找集合中的第n個醜數。說明 結果不超過32位整數能表...