当前位置 博文首页 > Keven_11的博客:C++题解:百钱买百鸡数量

    Keven_11的博客:C++题解:百钱买百鸡数量

    作者:[db:作者] 时间:2021-08-18 15:48

    ????????目录

    题目?

    题解


    题目?

    • ?1000ms
    • ?131072K

    百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用?100?文钱买?100?只鸡,公鸡、母鸡、小鸡各买多少只?

    本程序要求解的问题是:给定一个正整数?n,用?n?文钱买?n?只鸡,问公鸡、母鸡、小鸡各买多少只?

    输入格式

    输入一个正整数?n。

    输出格式

    如果有解,输出有多少种解(可以用正整数表示的解)。

    如果无解,输出"No Answer."

    数据范围

    1≤n≤1018。

    输出时每行末尾的多余空格,不影响答案正确性

    要求使用「文件输入输出」的方式解题,输入文件为?chicken.in,输出文件为?chicken.out

    样例输入

    100

    样例输出

    4

    题解:

    知识点:数学

    分析: 由于价格是定值,做起来比较方便。我们设公鸡x只,母鸡y只,小鸡z只,鸡n只,则有:

    ????????????????5x+3y+\frac{1}{3}z=n \left | \right | x+y+z=n

    ? ? ? ? ? ? ? ? ∴7x+4y=n

    ? ? ? ? ? ? ? ? ∴x=-n+4k? ? y=2n-7k

    ? ? ? ? ? ? ?所以我们只需要计算合法的k的数量了

    ? ? ? ? ? ? ? 易证:\left \lceil \frac{n}{4} \right \rceil \leqslant k \leqslant \left \lfloor \frac{2n}{7} \right \rfloor

    代码:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    typedef long long LL;
    LL n;//注意用long long
    int main(){
        freopen("chicken.in","r",stdin);
        freopen("chicken.out","w",stdout);
        cin>>n;
        LL l=n/4+(n%4!=0);//k的下限
        LL r=n*2/7;//k的上限
        if (r<l){
            puts("No Answer.");
        }else{
            cout<<r-l+1<<endl;//合法的k的数量
        }
        return 0;
    }

    cs
    下一篇:没有了