我们令公鸡有i只,母鸡有j只,小鸡有k只,题目的本质即求方程组:⎩⎨⎧i+j+k=n5i+3j+3k=n的整数解的个数,应用初中数学知识可以求出这个方程的正整数解⎩⎨⎧i=4m+3nj=−7m−5nk=3m+3n(m∈Z),只要确定m的范围即可得到其正整数解的个数了.
事实上,题目有额外约束0≤i,j,k≤n,因此我们不难列出不等式组⎩⎨⎧0≤4m+3n≤n (1)0≤−7m−5n≤n (2)0≤3m+3n≤n (3),可以得到:
m∈[−43n,−21n]∩[−76n,−75n]∩[−n,−32n],即m∈[−43n,−75n]
只需要求区间[−43n,−75n]内的整数即可!
这是一个可行的代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n=0;
cin>>n;
float a = ceil(-(3.0/4.0)*n);
float b = floor(-(5.0/7.0)*n);
cout<<abs(b-a)+1;
}
但是它不能通过所有的测试点,原因是当n过大时,ceil(),floor()函数的输出格式是科学计数法而非标准的int类型。这段代码的修改留给读者留做习题。
有帮助,赞一个