計蒜客T1375 百錢買百雞 四

2021-10-24 05:31:09 字數 1486 閱讀 8907

百錢買百雞問題:公雞五文錢乙隻,母雞三文錢乙隻,小雞三隻一文錢,用 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 不行

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是否符合條件

3.滿足的話一定是有一種方案的,那麼怎樣就可以多一種方案?已知n是4和7組成的,那麼多一種就是把4個7換為7個4或者反過來,因此每當n有乙個28,就多一種替換方案

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...