• 【百鸡问题穷举法】算法实现


     

      1 /*******************************************************************
      2 *
      3 *问题描述:百鸡问题(古代数学家张丘建<<算经>>提出)
      4 *
      5 *公鸡每只5元,母鸡每只3元,小鸡3只1元
      6 *用100元钱买100只鸡,求公鸡、母鸡、小鸡只数
      7 *--穷举法
      8 *
      9 ********************************************************************/
     10 #include<iostream.h> 
     11 //#include<malloc.h>
     12 
     13 int sum=100;//所购买三种鸡的总数
     14  
     15 
     16 struct distribute
     17 {
     18     int cock_num;//公鸡数
     19     int hen_num;//母鸡数
     20     int chick_num;//小鸡数 
     21     distribute *pNext;
     22     
     23     distribute operator=(distribute c)//重载运算符
     24     { 
     25         cock_num=c.cock_num;
     26         hen_num=c.hen_num;
     27         chick_num=c.chick_num;
     28     }
     29 };
     30 
     31 distribute* Problem_Of_A_Hundred_Chickens(int &number);
     32 distribute* Problem_Of_A_Hundred_Chickens(int &number,int flag);//改进的算法
     33 void print(distribute pDis[],int n);
     34 
     35 void main()
     36 
     37     int num;
     38     distribute* p=Problem_Of_A_Hundred_Chickens(num,1);
     39     print(p,num); 
     40     //print(Problem_Of_A_Hundred_Chickens(num),num);
     41     
     42 }
     43 
     44 distribute* Problem_Of_A_Hundred_Chickens(int &number)
     45 {
     46     distribute* first=NULL;
     47     distribute *p1=new distribute;
     48     distribute *p2;
     49     number=0;
     50     int i,j,k;
     51     for(i=0;i<sum;i++)
     52     {
     53         for(j=0;j<sum;j++)
     54         {
     55             for(k=0;k<sum;k++)
     56             {
     57                 if((i+j+k)==sum&&(5*i+3*j+k/3)==100&&(k%3==0))
     58                 {
     59                     number++;
     60                     //pDis=(struct distribute*)malloc(sizeof(struct distribute));    
     61                     p1->cock_num=i;
     62                     p1->hen_num=j;
     63                     p1->chick_num=k;
     64                     if(number==1)
     65                     {
     66                         first=p1;
     67                     }
     68                     p2=p1;
     69                     p1=new distribute;
     70                     p2->pNext=p1;                    
     71                 }
     72             }
     73         }
     74     }
     75     p2->pNext=NULL;
     76     //print(first,number); 
     77     return first;
     78 }
     79 //------------------------------------------------------------//
     80 //改进算法
     81 //------------------------------------------------------------//
     82 distribute* Problem_Of_A_Hundred_Chickens(int &number,int flag)
     83 {
     84     distribute* first=NULL;
     85     distribute *p1=new distribute;
     86     distribute *p2;
     87     number=0;
     88     int i,j,k;
     89     for(i=0;i<=100/5;i++)
     90     {
     91         for(j=0;j<=100/3;j++)
     92         {
     93             k=sum-i-j;
     94             if(k%3==0&&(5*i+3*j+k/3)==100)
     95             {
     96                     number++;
     97                     p1->cock_num=i;
     98                     p1->hen_num=j;
     99                     p1->chick_num=k;
    100                     if(number==1)
    101                     {
    102                         first=p1;
    103                     }
    104                     p2=p1;
    105                     p1=new distribute;
    106                     p2->pNext=p1;    
    107             }
    108         }
    109     }
    110     p2->pNext=NULL;
    111     return first;
    112 }
    113 void print(distribute *pDis,int n)
    114 {
    115     cout<<"公鸡数"<<"  "<<"母鸡数"<<"  "<<"小鸡数"<<"\n";
    116  
    117     for(int i=0;i<n;i++)
    118     {
    119         cout<<"   "<<pDis->cock_num<<"      "<<pDis->hen_num<<"      "<<pDis->chick_num;
    120         cout<<endl;
    121         pDis=pDis->pNext;
    122     }
    123 }
    124  
     

    运行结果:

  • 相关阅读:
    Codeforces Round #647 (Div. 2) A
    Acwing 1129. 热浪 解题报告
    二分 + 三分模板
    可持久化线段树(主席树)模板
    《架构之美》-----阅读笔记四
    《架构之美》-----阅读笔记三
    《架构之美》-----阅读笔记二
    《架构之美》-----阅读笔记一
    《软件需求》------阅读笔记三
    《软件需求》------阅读笔记二
  • 原文地址:https://www.cnblogs.com/wintergrass/p/1998317.html
Copyright © 2020-2023  润新知