時間限制:3000 ms | 記憶體限制:65535 kb
難度:3
描述給你乙個非負數整數n,判斷n是不是一些數(這些數不允許重複使用,且為正數)的階乘之和,如9=1!+2!+3!,如果是,則輸出yes,否則輸出no;
輸入第一行有乙個整數0
輸出如果符合條件,輸出yes,否則輸出no;
樣例輸入
2樣例輸出910
yesno方法:(演算法思路錯誤,只適用於該題)
facs是n!
sums是1!+2!+3!+……+n!
判斷乙個數是否是相加和,如果大於sums[x],那麼它的相加的數里必定有乙個最大數是facs[x+1]。減去這個最大數,然後繼續迴圈判斷是否大於sums[x],
依次減去最大數,直到減到0為止。如果減到最後不是0,那麼就不是相加和。
發現乙個規律,這個數必定在 facs[x]和sums[x]之間。
#includeusingnamespace
std;
int facs[10] = ;
int sums[10] = ;
intmain()
else
if(x ==sums[i])
}if(x != 0
) cout
<< "no"
cout
<< "
yes"
<}
return0;
}
適用於該題的最簡單演算法
#includeusing
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...