注册 登录
编程论坛 C++教室

帮写个计算题 一直没写出来

jaksok 发布于 2010-12-03 12:08, 1302 次点击
帮写个计算题 一直没写出来


用一百元买一百个蛋,鸡蛋一毛一个,鸭蛋一块五一个,鹅蛋三块一个。请问鸡、鸭、鹅蛋各买多少个
#include <iostream>
using namespace std;
int main()
{
    int x,y,z,ok,M;
    int A,B,C;
    A=x*0.1;
    B=y*1.5;
    C=z*3;
    M=x+y+z;
    cin>>M;
    ok=A+B+C;
    for (x=1;x<M;x++)
    {
         for (y=1;y<M;y++)
        {
              for (z=1;z<M;z++);
            M=x+y+z;
            cout<<x<<"\n"<<y<<"\n"<<z<<endl;
        }
    }
    return 0;
}

为什么不成啊!!!

[ 本帖最后由 jaksok 于 2010-12-3 12:41 编辑 ]
20 回复
#2
rainbow12010-12-03 12:29
先上网查一下算法,再写程序。
#3
jaksok2010-12-03 12:41
在线等 ,,,
#4
vandychan2010-12-03 12:47
还是下线等吧
#5
jaksok2010-12-03 12:51
以下是引用vandychan在2010-12-3 12:47:13的发言:

还是下线等吧
为什么
#6
木头lbj2010-12-03 13:04
为什么鸡蛋这么便宜?鸡蛋到底是一块一个还是一毛一个?
#7
zhoufeng19882010-12-03 13:31
看看这个结果是你想要的吗?
程序代码:
/*文件名: BuyEggs.cpp*/
/*用一百元买一百个蛋,鸡蛋一毛一个,鸭蛋一块五一个,鹅蛋三块一个。请问鸡、鸭、鹅蛋各买多少个*/

#include <iostream.h>
#include <iomanip.h>

/*定义价格*/
#define PRICE_EGG    0.1                            /*鸡蛋价格*/
#define PRICE_DUCK_EGG 1.5                /*鸭蛋价格*/
#define PRICE_GOOSE_EGG 3.0                /*鹅蛋价格*/
/*现有金额*/
#define MONEY 100.0

double TotalMoney( int, int, int);    /*统计金额*/

int main()
{
        double money = MONEY;
        int count_egg = 0, count_duck_egg = 0, count_goose_egg = 0;
        int count_max_eggs = ( int)( money / PRICE_EGG);
        int count_max_duck_eggs = ( int)( money / PRICE_DUCK_EGG);
        int count_max_goose_eggs = ( int)( money / PRICE_GOOSE_EGG);
        //cout << count_max_eggs << " " << count_max_duck_eggs << " " << count_max_goose_eggs << endl;                /*打印可以买到的鸡蛋数量*/
      
        for ( ; count_egg < count_max_eggs; count_egg++)
        {
            for ( count_duck_egg = 0; count_duck_egg < count_max_duck_eggs; count_duck_egg++)
            {
                for ( count_goose_egg = 0; count_goose_egg < count_max_goose_eggs; count_goose_egg++)
                {
                    if ( TotalMoney( count_egg, count_duck_egg, count_goose_egg) == MONEY)
                    {
                        cout << "鸡蛋 " << setw(3) << count_egg << " 个,"
                        << "鸭蛋 " << setw(3) << count_duck_egg << "个,"
                        << "鹅蛋 " << setw(3) << count_goose_egg << "" << endl;   
                    }   
                }   
            }   
        }
}


double TotalMoney( int eggs, int duck_eggs, int goose_eggs)
{
    double total = PRICE_EGG * eggs + PRICE_DUCK_EGG * duck_eggs + PRICE_GOOSE_EGG * goose_eggs;   
   
    return total;
}

只有本站会员才能查看附件,请 登录

#8
zhoufeng19882010-12-03 13:38
只有本站会员才能查看附件,请 登录


这是完整的结果。
#9
张春平2010-12-03 14:02
#include"iostream"
using namespace std;
void main()
{
    int x,y,z;
    float m;
    for(x=0;x<100;x++)
        for(y=0;y<=66;y++)
            for(z=0;z<=33;z++)
            {
                m=0.1*x+1.5*y+3.0*z;
                if(m==100&&x+y+z==100)
                    cout<<"鸡蛋的个数为"<<x<<"个   "<<"鸭蛋的个数为"<<y<<"个   "<<"鹅蛋的个数为"<<z<<"个   "<<endl;
            }
}
运行结果为:
鸡蛋的个数为40个  鸭蛋的个数为56个  鹅蛋的个数为4个
鸡蛋的个数为55个  鸭蛋的个数为27个  鹅蛋的个数为18个
#10
zhoufeng19882010-12-03 17:39
好像不止两种结果吧?
#11
pangding2010-12-03 22:22
先把问题统一到一毛上,于是就是你有一千毛钱。设买三种蛋分别 x, y, z 个。问题等价于:
x + 15y + 30z = 1000
的非负整数解。这个东西初中,甚至小学应该就接触过吧?

不过仔细一想,是不是感觉没学过具体的解法?原因其实就是这种方程不是很好解。
这种方程叫不定方程。一次的不定方程(你这个就是,就是没有x^2这样的东西)已经有比较好的解法了。
另外你这个问题,比较像百钱百鸡问题,只是約束条件还更少一点。

这个可以用暴力法穷举出来。如果想找点其它好算法,可以自己去搜一下“不定方程”,“多元一次不定方程”,或者“百钱百鸡”之类的。应该会有不少有用的资料。
#12
张春平2010-12-04 03:14
我运行了的,算起来只有两种满足。你自己再看一下嘛,如果发现还有另一种可以写出来我们探讨一下。
#13
windofland2010-12-04 11:33
cout << "鸡蛋 " << setw(3) << count_egg << " 个,"
<< "鸭蛋 " << setw(3) << count_duck_egg << "个,"
<< "鹅蛋 " << setw(3) << count_goose_egg << "个" << endl;

7楼的程序3个for循环和if语句都明白,但if语句中的这3个语句的作用是什么?请解释下,谢谢
#14
windofland2010-12-04 11:36
另外,楼主是不是由于没有给M赋值导致程序结果不对,如果给M赋值让M=100的话情况是什么样?
#15
windofland2010-12-04 11:39
不对,M是鸡鸭鹅蛋的总数,应该是给OK赋值,ok是总的钱数,应该是100,程序应该还缺少一个判断,当ok=100时应该输出xyz的值
#16
windofland2010-12-04 11:45
9楼的结果之所以是两种,是不是由于对鸡鸭鹅蛋的数值进行了限制,鸡蛋最多就100(x<100)这个限制导致的?为什么要小于100个?鸡蛋0.1元,那最多也应该有1000个啊?为什么要100个?7楼的结果我看了,符合楼主的要求,并且出的结果应该是全部的可能性。
#17
zhoufeng19882010-12-04 12:38
哦,还有一个条件撒,没看到,那在判断里面再加一条,三种加起来等于100个。
不好意思~
#18
张春平2010-12-04 18:31
回复 16楼 windofland
为什么不对鸡鸭鹅蛋的个数进行限制呢?题个数不能大于目中是用一百元钱买一百个鸡蛋,可以从中得出鸡蛋的个数不能大于100个,鸭蛋的个数不能大于66个,鹅蛋的个数不能大于33个。请注意“一百元钱买一百个鸡蛋”是关键。
#19
Mack22010-12-04 19:25
//百元买一百个蛋,鸡蛋一毛一个,鸭蛋一块五一个,鹅蛋三块一个。请问鸡、鸭、鹅蛋各买多少个
#include <iostream>
using namespace std;
const double PRICE_EGGS=0.1;
const double PRICE_DUCK=1.5;
const double PRICE_DOOSE=3;
const double ALL=100;
int main()
{
    int num_eggs,num_duck,num_doose;
    double money=ALL;
    double toal(int m,int n,int i);
    int toal1(int m1,int m2,int m3);
    int max_duck=int(money/PRICE_DUCK);
    int max_doose=int(money/PRICE_DOOSE);
    for(num_doose=1;num_doose<=max_doose;num_doose++)
        for(num_duck=1;num_duck<=max_duck;num_duck++)
            for(num_eggs=1;num_eggs<=100;num_eggs++)
                if(toal(num_eggs,num_duck,num_doose)==ALL&&toal1(num_eggs,num_duck,num_doose)==100)
                {
                    cout<<"鸡蛋:"<<num_eggs
                        <<"鸭蛋:"<<num_duck
                        <<"鹅蛋:"<<num_doose<<endl;
                }
                return 0;

}
double toal(int m,int n,int i)
{
    double f;
    f=PRICE_EGGS*m+PRICE_DUCK*n+PRICE_DOOSE*i;
    return f;
}
    int toal1(int m1,int m2,int m3)
    {
        return(m1+m2+m3);
    }

只有本站会员才能查看附件,请 登录
#20
海豚小默2010-12-04 21:39
程序代码:
#include < iostream >

using namespace std;

int main()
{
    int i,j,k;
    double m;
    for(i=1;i<=100;i++)
    {
        for(j=1;j<=100;j++)
        {
            for(k=1;k<=100;k++)
            {
                m=i*0.1+1.5*j+3*k;
                if(m==100&&((i+j+k)==100))
                    cout<<"鸡蛋:"<<i<<"\t鸭蛋:"<<j<<"\t鹅蛋:"<<k<<endl;
            }
        }
    }
    return 0;
}
鸡蛋:40        鸭蛋:56        鹅蛋:4
鸡蛋:55        鸭蛋:27        鹅蛋:18
Press any key to continue
#21
cadypeng2010-12-05 03:04
回复 楼主 jaksok
这道题应分多种情况,下面是给出个参考 希望对你有帮助
void main()
{
   
    int x,y,z;
    float i;
    const float m_x=0.1,m_y=1.5,m_z=3;
    cout<<"只买单种鸡蛋情况明显不成立"<<endl<<endl;
   
    cout<<"买鸡蛋和鸭蛋情况"<<endl;
    for(x=0;x<=100;x++)
    {
        for(y=0;y<=100;y++)
        {
            i=x*m_x+y*m_y;
            if(((x+y)==100)&&(i==100))
                cout<<"鸡蛋"<<x<<"鸭蛋"<<y<<endl<<endl;
               
        }
    }
    if(!(((x+y)==100)&&(i==100)))
        cout<<"买鸡蛋和鸭蛋情况不成立"<<endl<<endl;
    cout<<"买鸡蛋和鹅蛋情况"<<endl;
    for(x=0;x<=100;x++)
    {
        for(z=0;z<=100;z++)
        {
            i=x*m_x+z*m_z;
            if(((x+z)==100)&&(i==100))
            {    cout<<"鸡蛋"<<x<<"鹅蛋"<<z<<endl;}
            
        }
    }
    if(!(((x+z)==100)&&((x*m_x+z*m_z)==100)))
        cout<<"买鸡蛋和鹅蛋不成立"<<endl<<endl;

   
    cout<<"买鸭蛋和鹅蛋情况"<<endl;
    for(y=0;y<=100;y++)
    {
        for(z=0;z<=100;z++)
        {
            if(((z+y)==100)&&((y*m_y+z*m_z)==100))
            {    cout<<"鸭蛋"<<y<<"鹅蛋"<<z<<endl;}
            
        }
    }
    if(!(((z+y)==100)&&((y*m_y+z*m_z)==100)))
        cout<<"买鸭蛋和鹅蛋不成立"<<endl<<endl;

   
    cout<<"三种蛋都买的情况"<<endl;
    for(x=0;x<=100;x++)
    {
        for(y=0;y<=100;y++)
        {
             for(z=0;z<=100;z++)
             {
                  i=x*m_x+y*m_y+z*m_z;
                 if((x+y+z)==100&&(i==100))
                     cout<<"鸡蛋:"<<x<<"鸭蛋:"<<y<<"鹅蛋:"<<z<<endl;
             }
        }
    }

}

1