ACM 階乘之和

2022-05-05 08:51:08 字數 1057 閱讀 7355

時間限制:3000 ms  |  記憶體限制:65535 kb

難度:3

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

輸入第一行有乙個整數0

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

樣例輸入

2

910

樣例輸出

yes

no方法:(演算法思路錯誤,只適用於該題)

facs是n!

sums是1!+2!+3!+……+n!

判斷乙個數是否是相加和,如果大於sums[x],那麼它的相加的數里必定有乙個最大數是facs[x+1]。減去這個最大數,然後繼續迴圈判斷是否大於sums[x],

依次減去最大數,直到減到0為止。如果減到最後不是0,那麼就不是相加和。

發現乙個規律,這個數必定在 facs[x]和sums[x]之間。

#includeusing

namespace

std;

int facs[10] = ;

int sums[10] = ;

intmain()

else

if(x ==sums[i])

}if(x != 0

) cout

<< "no"

cout

<< "

yes"

<}

return0;

}

適用於該題的最簡單演算法

#include

using

namespace

std;

intmain()

; cin>>n;

while(n--)

if(flag)

cout

<<"

yes"

cout

<<"no"

<}

}

acm 階乘之和

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

nyoj 階乘之和

階乘之和 描述 給你乙個非負數整數n,判斷n是不是一些數 這些數不允許重複使用,且為正數 的階乘之和,如9 1!2 3 如果是,則輸出yes,否則輸出no 輸入 第一行有乙個整數0 輸出如果符合條件,輸出yes,否則輸出no 樣例輸入 29 10 樣例輸出 yes no 方法一 includeint...

nyoj 階乘之和

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