百钱买百鸡问题

来源:互联网 发布:淘宝饰品创业计划书 编辑:程序博客网 时间:2024/06/14 20:19

数据结构老师让我深深体会到了算法的美!一个看似简单的百钱买百鸡的问题实则有很多奥秘和技巧

//@auther Yang Zongjun#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <string>#include <cstring>using namespace std;#define PI acos(-1.0)#define EPS 1e-8const int MAXN = 1100000;const int INF = 2100000000;/*题目描述:    有一百元钱去买一百只鸡,其中公鸡每只5元,母鸡每只3元,    小鸡每3只一元,求所有可能的解*/int main(){    //freopen("C:/Users/Administrator/Desktop/input.txt", "r", stdin);    //1.三重循环,最耗时,O(10^6)    for(int i = 0; i <= 100; i++)    {        for(int j = 0; j <= 100; j++)        {            for(int k = 0; k <= 100; k++)            {                if(k%3==0 && i+j+k==100 && 5*i+3*j+k/3==100)                    printf("公鸡:%d 母鸡:%d 小鸡:%d\n", i, j, k);            }        }    }    printf("\n");        //2.二重循环,有所优化    for(int i = 0; i <= 100; i++)    {        for(int j = 0; j <= 100; j++)        {            int k = 100-i-j;            if(k%3==0 && i+j+k==100 && 5*i+3*j+k/3==100)                printf("公鸡:%d 母鸡:%d 小鸡:%d\n", i, j, k);        }    }    printf("\n");        //3.二重循环,更加优化    for(int i = 0; i <= 20; i++)    {        for(int j = 0; j <= 33; j++)        {            int k = 100-i-j;            if(k%3==0 && i+j+k==100 && 5*i+3*j+k/3==100)                printf("公鸡:%d 母鸡:%d 小鸡:%d\n", i, j, k);        }    }    printf("\n");        //4.一重循环,最简    for(int i = 0; i <= 14; i+= 4)    {//i即公鸡一定是4的倍数且<= 14;        int j = (100 - 7*i)/4;        int k = 100-i-j;        if(k%3==0 && i+j+k==100 && 5*i+3*j+k/3==100)            printf("公鸡:%d 母鸡:%d 小鸡:%d\n", i, j, k);    }    printf("\n");        return 0;}


0 0