NYOJ 91 階乘之和

2021-06-21 10:01:55 字數 1330 閱讀 6547

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:3 描述

給你乙個非負數整數n,判斷n是不是一些數(這些數不允許重複使用,且為正數)的階乘之和,如9=1!+2!+3!,如果是,則輸出yes,否則輸出no;

輸入

第一行有乙個整數0

輸出如果符合條件,輸出yes,否則輸出no;

樣例輸入

2
9
10

樣例輸出

yes
no

上傳者李劍鋒

由於判斷n是不是一些數的階乘之和,這些數只要不一樣,可以任意組合,沒有連續和個數的限制,所以不可能窮舉,那會很耗時。

不過經過思考發現階乘有這麼個性質:1!+2!+……+(k-1)!當k!那這樣,接下來就是尋找階乘之和為n-k!的數了,接著尋找比n-k!小的最大階乘即可,一直到1!。

#include

02.usingnamespacestd;

03.

04.intfact[10]=;

05.

06.intmain()

07.

22.elseif(tmpn>fact[i])

23.tmpn-=fact[i];

24.}

25.if(flag)

26.cout<<"yes"<

27.else

28.cout<<"no"<

29.}

30.return0;

31.}

NYOJ 91 階乘之和

時間限制 3000 ms 記憶體限制 65535 kb 難度 3描述 給你乙個非負數整數n,判斷n是不是一些數 這些數不允許重複使用,且為正數 的階乘之和,如9 1!2 3 如果是,則輸出yes,否則輸出no 輸入 第一行有乙個整數0 輸出如果符合條件,輸出yes,否則輸出no 樣例輸入 2 9 1...

nyoj 91 階乘之和

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 給你乙個非負數整數n,判斷n是不是一些數 這些數不允許重複使用,且為正數 的階乘之和,如9 1!2 3 如果是,則輸出yes,否則輸出no 輸入 第一行有乙個整數0 輸出如果符合條件,輸出yes,否則輸出no 樣例輸入 29 1...

NYOJ 91 階乘之和

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 給你乙個非負數整數n,判斷n是不是一些數 這些數不允許重複使用,且為正數 的階乘之和,如9 1!2 3 如果是,則輸出yes,否則輸出no 輸入 第一行有乙個整數0 輸出如果符合條件,輸出yes,否則輸出no 樣例輸入 2 9 ...