百錢買百雞問題:公雞五文錢乙隻,母雞三文錢乙隻,小雞三隻一文錢,用 100 文錢買 100 隻雞,公雞、母雞、小雞各買多少只?
本程式要求解的問題是:給定乙個正整數 n,用 n 文錢買 n隻雞,問公雞、母雞、小雞各買多少只?
輸入格式
輸入乙個正整數 n。
輸出格式
如果有解,輸出有多少種解(可以用正整數表示的解)。
如果無解,輸出"no answer."。
資料範圍
1≤n≤1018
輸出時每行末尾的多餘空格,不影響答案正確性
樣例輸入
樣例輸出
1.根據要求n錢買n雞,所以當買1公雞,就需要6小雞湊成7錢買7雞,每當買1母雞,就需要3小雞湊成4錢買4雞,也就是說,需要用4錢和7錢去組合買雞,才能滿足n錢買n雞
2.那麼根據上述,看看n為幾就滿足?
n=1 不行3.滿足的話一定是有一種方案的,那麼怎樣就可以多一種方案?已知n是4和7組成的,那麼多一種就是把4個7換為7個4或者反過來,因此每當n有乙個28,就多一種替換方案n=2 不行
n=3 不行
n=4=4
n=5 不行
n=6 不行
n=7=7
n=8=4+4
n=9 不行
n=10 不行
n=11=4+7
n=12=4+4+4
n=13 不行
n=14=7+7
n=15=4+4+7
n=16=4+4+4+4
n=17 不行
n=18=7+7+4
n=19=4+4+4+7
n=20=4+4+4+4+4
n=21=7+7+7
…由上面可以看出,17是最後乙個不行的數,因此可以先判斷n是否符合條件
4.但是要注意,不是有幾個28就可以全部替換
比如100=28
∗3+16
100=28*3+16
100=28
∗3+1
6,16=4
∗4
16=4*4
16=4∗4
,都可以湊出來,所以有3個28替換,方案就是1+3種
比如29=28+1,去掉乙個28後剩1,是湊不出來的,所以這個28不可以拿出來替換,29只能是3∗7
+2∗4
3*7+2*4
3∗7+2∗
4一種方案
因此還需要看去掉28後的數是否滿足,如果不滿足,就要放回去乙個28(根據2,大於28的一定可以湊出來)也就是方案減一,這樣才能滿足
#include
using
namespace std;
typedef
long
long ll;
//int a=;
bool
no(ll ans)
intmain()
}
計蒜客 1373 百錢買百雞 複雜度優化
百錢買百雞問題 公雞五文錢乙隻,母雞三文錢乙隻,小雞三隻一文錢,用 100100 文錢買 100100 隻雞,公雞 母雞 小雞各買多少只?本程式要求解的問題是 給定乙個正整數 nn,用 nn 文錢買 nn 隻雞,問公雞 母雞 小雞各買多少只?輸入格式 輸入乙個正整數 nn。輸出格式 如果有解,依次輸...
百錢買百雞
這是個很簡單的邏輯,本來沒有什麼太多值得分享的。並且實現程式網上隨處可見,鄙人也並未提出更高深的意見。在閒暇看書時,對比了以下兩種實現。發現,其 實數學計算的不定性,可利用計算機的不斷重複 篩選 得到想要結果 如第一種實現 但是,顯而易見的是,第一種實現有個複雜度的問題。而第二種實現,是在數學計算推...
百錢買百雞
百錢買百雞。中國古代數學家張丘建在他的 算經 中提出了著名的 百錢買百雞 問題 雞翁一,值錢五 雞母一,值錢三 雞雛三,值錢一 百錢買百雞,翁 cock 母 hen 雛 chick 各幾何?include int main int cock,hen,chick printf cock t,hen t...