u239 整數分解

2021-09-28 10:09:33 字數 990 閱讀 4605

time limit: 1 second

memory limit: 128 mb

某些數能表示成為一些互不相同的整數的階乘之和。如9=l!+2! +3!。 現在給定乙個非負整數n,要求判斷n能否表示成為一些互不相 同的非負整數的階乘之和,如果能,則輸出「yes",否則輸出「n0」(引號不輸出)。

輸入檔案中每行乙個非負整數n(n≤1000000),最後一行是乙個負數,作為輸入的結束。

對輸入檔案中的每個非負整數n,在輸出檔案中分別輸出「yes」或「n0」,各佔l行。(引號不輸出)

9

5-1

【題解】

對於n >=3;n!> (n-1)!+(n-2)!+(n-3)!....

eg:0!=1 1!=1 2!=2 3!= 6

3 !>0!+1!+2!

根據這個原理,我們可以從9遞減到1進行列舉。(10!>100w),只要這個數字能夠減去i!,則一定要減。否則後面的數加起來都不能和i!一樣大。因此 規則就是遇到能減就減。

如果減完一次i!之後還能再減同樣的i!,那麼就無解了(要求數字要不同);最後判斷一下答案是否為0就好。

n<=2的情況是

2 1 1,如果2可以減,那麼就減。剩下兩個1,可以乙個乙個減。又都是整數。所以如果有解,是一定不會漏掉的。

【**】

#include #include #define maxn 19

int n,a[11];

void input_data()

if (temp >= a[i]) //如果能減就減。不能減的就跳過。

temp-=a[i];

}if (flag && temp == 0 && x!=0) //如果剛好減完就輸出有解資訊。

printf("yes\n");

else

printf("no\n");

scanf("%d",&x);

}}int main()

正整數分解

程式整體思路 分解就是乙個數減1,這個數後面的數加1 一次分解之後 找到最後乙個比1大的元素座標,然後與上一次相比,如果座標發生了偏移,那麼會發生向後偏移,說明又開始有乙個數需要分解,這個時候需要增加乙個元素,該情況下其實就是新出現了2 此時這個座標是2所在的位置 將2分解完畢之後,再繼續找比1大的...

整數分解與重組

對給定的整數進行分解與重組,集成為滿足某些特定條件的陣列,是一項具有挑戰性的設計,也是一類非常有趣的智力遊戲 本節探索 雙和3元2組 與 和積3元3組 兩個案例,注意分解的實施與重組條件 雙和 和積 的實現 把給定偶數2n分解為6個互不相等的正整數a b c d e f,然後把這6個數分成 a b ...

正整數分解演算法

問題 將以正整數n表示成一系列正整數之和.n n1 n2 n3 nk n1 n2 n3 nk 1,k 1 這就是正整數n的乙個劃分,正整數n不同的劃分個數稱為正整數n的劃分數,記作p n 例如 6 有如下11種劃分則p 6 116 5 1 4 2,4 1 1 3 3,3 2 1,3 1 1 1 2 ...