标题:5羊4犬3鸡2兔....穷举 求羊值多好钱?
只看楼主
张敏樱木花道
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:137
注 册:2011-3-26
得分:1 
我觉得做这类题目,我们可以人为的进行分析,对其进行等价变形。加一些限制条件,获得足够的情报后再由程序解决。这样也许会提高效率。
2011-04-07 23:33
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
回复 9楼 ebao
7楼市错误滴
2011-04-07 23:36
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
得分:1 
回复 2楼 ebao
好像我就是啊,循环变量没有归0,哎……,以后不会在犯这样的错啦!

人得一生得奋斗!
2011-04-08 00:03
fobtgmi
Rank: 2
等 级:论坛游民
帖 子:28
专家分:34
注 册:2010-11-19
得分:1 
我现在的水平还看不懂。
2011-04-08 06:33
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:1 
这种题为什么要要求用穷举做?
2011-04-08 08:47
zhaxi0927
Rank: 2
来 自:buct
等 级:论坛游民
帖 子:13
专家分:15
注 册:2011-4-7
得分:0 
//今有5羊4犬3鸡2兔值钱1496,4羊2犬6鸡3兔值钱1175,3羊1犬7鸡5兔值钱958,2羊3犬5鸡1兔值钱861,求羊值多少钱?//
#include<iostream>
#include<conio.h>
#include<stdio.h>
using namespace std;
long long lcm(long long a,long long b)//最大公约数
{   
    if(a%b==0)return b;
    else return lcm(b,a%b);
}   
long long gcd(long long a,long long b)//最小公倍数
{
    return a/lcm(a,b)*b;
}
int main()
{
    int a[4][5]={5,4,3,2,1496,4,2,6,3,1175,3,1,7,5,958,2,3,5,1,861},i,j,k,s,t;
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)cout<<a[i][j]<<" ";
        cout<<endl;
    }   
    for(j=3;j>0;j--)
    {
        if(a[j][j]!=0)
        {
            for(i=0;i<j;i++)
            {
                s=gcd(a[i][j],a[j][j])/a[i][j];//第i行需要扩大的倍数
                t=gcd(a[i][j],a[j][j])/a[j][j];//第j行需要扩大的倍数
                cout<<"s"<<s<<" t"<<t<<" ";
                for(k=0;k<5;k++)
                {
                    a[i][k]=a[i][k]*s-a[j][k]*t;
                    cout<<a[i][k]<<" ";
                }   
                cout<<endl;
            }
            cout<<"_________________________________________________"<<endl;   
        }   
    }
    cout<<a[1][4]/a[1][0]; //这一步换成cout<<a[0][4]/a[0][0】才应该是正常的程序
    getch();
}
我试着用咱们解方程的步骤计算,效果还不错,但是没办法处理0,比如:
5 4 3 2 1496
4 2 6 3 1175
3 1 7 5 958
2 3 5 1 861
s1 t2 1 -2 -7 0 -226
s1 t3 -2 -7 -9 0 -1408
s1 t5 -7 -14 -18 0 -3347
_________________________________________________
s18 t7 67 62 0 0 19361
s2 t1 3 0 0 0 531                                  //运行到这里我的程序就不知道怎么处理了,希望有那位大哥可以指点。
_________________________________________________
177

//我感觉自己应该看一点和矩阵运算有关的算法了,加油!

Be strong!
2011-04-08 10:57
zys04051049
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-4-7
得分:0 
main()
{int i,j,k,h;
 for(i=1;i<300;i++)
 for(j=1;j<287;j++)
 for(k=1;k<172;k++)
 for(h=1;h<191;h++)
 if(5*i+4*j+3*k+2*h==1496&&4*i+2*j+6*k+3*h==1175
    &&3*i+j+7*k+5*h==958&&2*i+3*j+5*k+h==861)
 printf("the price of sheep is:%d,%d,%d,%d",i,j,k,h);
 }
2011-04-08 11:10
njkido
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:224
专家分:1184
注 册:2011-3-8
得分:0 
回复 16楼 zhaxi0927
本题应该是把增广矩阵变成一个下三角 所以对角线不能置0
2011-04-08 12:40
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
有零要么就是有无穷多解,要么就是无解。
无解的判定一下;
无穷多解的,正整数解可能是有穷多的。要用矩阵做,我们一般要用到基础解系这个概念。你如果有兴趣,可以自己查查看。
2011-04-08 22:08
zhaxi0927
Rank: 2
来 自:buct
等 级:论坛游民
帖 子:13
专家分:15
注 册:2011-4-7
得分:0 
呵呵 线性代数的东西忘了好多啊,刚好要考研就再复习一下哈。不过那个零是这个意思:
5    4    3    2    1496
4    2    6    3    1175
3    1    7    5    958
2    3    5    1    861

1    -2   -7   0    -226
-2   -7   -9   0    -1408
-7   -14  -18  0    -3347
2    3    5    1    861

67   62   0    0    19361
3    0    0    0    531   
-7   -14 -18   0    -3347
2    3    5    1    861   

我本意是变成一个下三角,但是在上面的过程中,在啊a[1][1]也就是第2行第2列出现了个零,我的处理过程是要用这一行把这一行上面的变成零。然而出现了零,我就需要做一些额外的操作(比如把第一行和第二行交换)。但是编程实现这个却小有难度。
方法大概是这样的,你向前找到一个对应位置的数不为零的一行,然后交换这两行,然后继续操作。但是处理会比较繁琐,我还没整理清楚。

Be strong!
2011-04-09 12:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-335333-1-1.html




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

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