問題描述 :
道德經曰:一生二,二生三,三生萬物。
對於任意正整數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位整數能表...