時間限制:
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.
using
namespace
std;
03.
04.
int
fact[10]=;
05.
06.
int
main()
07.
22.
else
if
(tmpn>fact[i])
23.
tmpn-=fact[i];
24.
}
25.
if
(flag)
26.
cout<<
"yes"
<
27.
else
28.
cout<<
"no"
<
29.
}
30.
return
0;
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 ...