我们令公鸡有iii只,母鸡有jjj只,小鸡有kkk只,题目的本质即求方程组:{i+j+k=n5i+3j+k3=n\begin{cases}i+j+k=n\\ 5i+3j+\cfrac{k}{3}=n\end{cases}⎩⎨⎧ i+j+k=n5i+3j+3k =n 的整数解的个数,应用初中数学知识可以求出这个方程的正整数解{i=4m+3nj=−7m−5nk=3m+3n(m∈Z)\begin{cases}i=4m+3n\\j=-7m-5n\\k=3m+3n\\\end{cases}(m\in Z)⎩⎨⎧ i=4m+3nj=−7m−5nk=3m+3n
(m∈Z),只要确定mmm的范围即可得到其正整数解的个数了.
事实上,题目有额外约束0≤i,j,k≤n0\leq i,j,k\leq n0≤i,j,k≤n,因此我们不难列出不等式组{0≤4m+3n≤n (1)0≤−7m−5n≤n (2)0≤3m+3n≤n (3)\begin{cases}0\leq 4m+3n\leq n\ \ \ \ (1)\\0\leq -7m-5n\leq n\ (2)\\0\leq 3m+3n \leq n\ \ \ \ (3)\\\end{cases}⎩⎨⎧ 0≤4m+3n≤n (1)0≤−7m−5n≤n (2)0≤3m+3n≤n (3) ,可以得到:
m∈[−34n,−12n]∩[−67n,−57n]∩[−n,−23n],即m∈[−34n,−57n]m\in[-\cfrac{3}{4}n,-\cfrac{1}{2}n]\cap[-\cfrac{6}7{n,-\cfrac{5}{7}n}]\cap[-n,-\cfrac{2}{3}n],即m\in[-\cfrac{3}{4}n,-\cfrac{5}{7}n] m∈[−43 n,−21 n]∩[−76 n,−75 n]∩[−n,−32 n],即m∈[−43 n,−75 n]
只需要求区间[−34n,−57n][-\cfrac{3}{4}n,-\cfrac{5}{7}n][−43 n,−75 n]内的整数即可!
这是一个可行的代码:
但是它不能通过所有的测试点,原因是当nnn过大时,ceil(),floor()\mathrm{ceil(),floor()}ceil(),floor()函数的输出格式是科学计数法而非标准的int\mathrm{int}int类型。这段代码的修改留给读者留做习题。