| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1302 人关注过本帖
标题:帮写个计算题 一直没写出来
只看楼主 加入收藏
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
先把问题统一到一毛上,于是就是你有一千毛钱。设买三种蛋分别 x, y, z 个。问题等价于:
x + 15y + 30z = 1000
的非负整数解。这个东西初中,甚至小学应该就接触过吧?

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

这个可以用暴力法穷举出来。如果想找点其它好算法,可以自己去搜一下“不定方程”,“多元一次不定方程”,或者“百钱百鸡”之类的。应该会有不少有用的资料。
2010-12-03 22:22
张春平
Rank: 3Rank: 3
来 自:北城
等 级:论坛游侠
帖 子:48
专家分:124
注 册:2010-12-2
收藏
得分:0 
我运行了的,算起来只有两种满足。你自己再看一下嘛,如果发现还有另一种可以写出来我们探讨一下。
2010-12-04 03:14
windofland
Rank: 2
等 级:论坛游民
帖 子:27
专家分:12
注 册:2010-12-1
收藏
得分:0 
cout << "鸡蛋 " << setw(3) << count_egg << " 个,"
<< "鸭蛋 " << setw(3) << count_duck_egg << "个,"
<< "鹅蛋 " << setw(3) << count_goose_egg << "个" << endl;

7楼的程序3个for循环和if语句都明白,但if语句中的这3个语句的作用是什么?请解释下,谢谢
2010-12-04 11:33
windofland
Rank: 2
等 级:论坛游民
帖 子:27
专家分:12
注 册:2010-12-1
收藏
得分:0 
另外,楼主是不是由于没有给M赋值导致程序结果不对,如果给M赋值让M=100的话情况是什么样?
2010-12-04 11:36
windofland
Rank: 2
等 级:论坛游民
帖 子:27
专家分:12
注 册:2010-12-1
收藏
得分:2 
不对,M是鸡鸭鹅蛋的总数,应该是给OK赋值,ok是总的钱数,应该是100,程序应该还缺少一个判断,当ok=100时应该输出xyz的值
2010-12-04 11:39
windofland
Rank: 2
等 级:论坛游民
帖 子:27
专家分:12
注 册:2010-12-1
收藏
得分:0 
9楼的结果之所以是两种,是不是由于对鸡鸭鹅蛋的数值进行了限制,鸡蛋最多就100(x<100)这个限制导致的?为什么要小于100个?鸡蛋0.1元,那最多也应该有1000个啊?为什么要100个?7楼的结果我看了,符合楼主的要求,并且出的结果应该是全部的可能性。
2010-12-04 11:45
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:0 
哦,还有一个条件撒,没看到,那在判断里面再加一条,三种加起来等于100个。
不好意思~
2010-12-04 12:38
张春平
Rank: 3Rank: 3
来 自:北城
等 级:论坛游侠
帖 子:48
专家分:124
注 册:2010-12-2
收藏
得分:0 
回复 16楼 windofland
为什么不对鸡鸭鹅蛋的个数进行限制呢?题个数不能大于目中是用一百元钱买一百个鸡蛋,可以从中得出鸡蛋的个数不能大于100个,鸭蛋的个数不能大于66个,鹅蛋的个数不能大于33个。请注意“一百元钱买一百个鸡蛋”是关键。
2010-12-04 18:31
Mack2
Rank: 1
来 自:山东
等 级:新手上路
帖 子:8
专家分:2
注 册:2010-11-26
收藏
得分:2 
//百元买一百个蛋,鸡蛋一毛一个,鸭蛋一块五一个,鹅蛋三块一个。请问鸡、鸭、鹅蛋各买多少个
#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);
    }

图片附件: 游客没有浏览图片的权限,请 登录注册
2010-12-04 19:25
海豚小默
Rank: 2
等 级:论坛游民
帖 子:4
专家分:12
注 册:2010-12-4
收藏
得分:2 
程序代码:
#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
2010-12-04 21:39
快速回复:帮写个计算题 一直没写出来
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026024 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved