魔方吧·中文魔方俱乐部

标题: 求助一道题 [打印本页]

作者: suntong0102    时间: 2009-3-20 19:54:27     标题: 求助一道题

三数相乘和想加都得7.11,三数都是0.01的整数倍,求这三数是多少??

原题是这样的,某人去seven eleven买东西,开始售货员算错了,把三件物品的价格相乘了,得出来结果是7.11元,后来售货员发现问题,把三个数相加,得出结果来还是7.11元,问这三件物品分别是多少钱?

[ 本帖最后由 suntong0102 于 2009-3-22 16:19 编辑 ]
作者: blow201    时间: 2009-3-20 20:04:55

好像不存在这样的3个数吧
作者: azlpub    时间: 2009-3-20 20:17:50

貌似找不到。

                for (int i = 1; i < 710; i++)
                        for (int j = 1; j < 710; j++)
                                for (int k = 1; k < 710; k++)
                                        if ((i+k+j == 711) && (i*k*j == 711000000))
                                        {
                                                System.out.print(“Found”);
                                        }                                       
无输出,呵呵
作者: lulijie    时间: 2009-3-21 11:07:44

3# 的
   i*k*j == 711000000
上述多了两个0。
应该是
i+j+k=711
i*j*k=7110000=2^4 * 3^2 * 5^4 * 79
作者: cfmake    时间: 2009-3-21 11:15:27

一个数学定理:  
  N个正数之和固定,设为SUM,则这N个正数的积的值域为:   (0,(SUM/N)^N   ].当且仅当这N个数相等时取得最大值。  
  利用这个定理就很容易解决了(你要了解它的精髓)。  
  另外一点要知道的:  
                      方程组:   x   +   y   ==   a   ;   x   *   y   =   b   ;   
                      的解是:   x   =   (a   +   sqrt   (   a   *   a   -   4   *   b   )   )   /2;  
                                        y   =   (a   -   sqcrt   (   a   *   a   -   4   *   b   )   )   /2;  
  将问题扩展:有N个正数和为SUM,积为PROD,求这N个正数的一组解。  
  函数定义:bool   my_func(const   double   sum,  
                                                const   double   prod,  
                                                const   unsigned   int   count   ,  
                                                double*   dest   )   ;  
  返回true代表求得一组解,返回false则代表问题无解。  
  函数的实现如下:  
  一个数学定理:  
  N个正数之和固定,设为SUM,则这N个正数的积的值域为:   (0,(SUM/N)^N   ].当且仅当这N个数相等时取得最大值。  
  利用这个定理就很容易解决了(你要了解它的精髓)。  
  另外一点要知道的:  
                      方程组:   x   +   y   ==   a   ;   x   *   y   =   b   ;   
                      的解是:   x   =   (a   +   sqrt   (   a   *   a   -   4   *   b   )   )   /2;  
                                        y   =   (a   -   sqcrt   (   a   *   a   -   4   *   b   )   )   /2;  
  将问题扩展:有N个正数和为SUM,积为PROD,求这N个正数的一组解。  
  函数定义:bool   my_func(const   double   sum,  
                                                const   double   prod,  
                                                const   unsigned   int   count   ,  
                                                double*   dest   )   ;  
  返回true代表求得一组解,返回false则代表问题无解。  
  函数的实现如下:  
  #include   <stdio.h>  
  #include   <math.h>  
  #include   <iostream.h>  
   
  bool   my_func(const   double   sum,  
                            const   double   prod,  
                            const   unsigned   int   count   ,  
                            double*   dest   )   
  {  
          if(   count   <   2   )   return   false;  
          double   average   =   sum   /   count   ;  
          if(   prod   >   pow(average,count)   )   return   false;  
          for(int   i   =   0;   i   <   count   -2;   ++i   )   dest   =   average;  
           
          double   x   ,   y   ,   a   ,   b   ;     //利用上面方程组的解  
          a   =   average   *   2;  
          b   =   prod   /   pow(average,count   -   2   );  
          x   =   (a   +   sqrt   (   a   *   a   -   4   *   b   )   )   /2;   
          y   =   (a   -   sqrt   (   a   *   a   -   4   *   b   )   )   /2;  
           
          dest[count   -   2]   =   x;  
          dest[count   -   1]   =   y;  
           
          return   true;  
  }  
  int   main(int   argc,   char*   argv[])  
  {  
          double   dest[4];  
          double   sum   =   7.11;  
          double   prod   =   7.11;  
          bool   suc   =   my_func(sum,prod,4,dest);  
          if(suc){  
                  cout<<"calc   success:\n       ";  
                  for(int   i   =   0;   i   <   4;   ++i){  
                          cout<<   dest<<"\n       "   ;  
                  }  
          }else{  
                  cout<<"unsulve!   \n";  
          }  
          return   0;  
  }  
  测试已通过。  
  calc   success:  
        1.7775  
        1.7775  
        2.731  
        0.824004
作者: suntong0102    时间: 2009-3-21 15:53:33     标题: 回复 3# 的帖子

恩,貌似多了两个零的
作者: blow201    时间: 2009-3-21 19:06:29

原帖由 cfmake 于 2009-3-21 11:15 发表
一个数学定理:  
  N个正数之和固定,设为SUM,则这N个正数的积的值域为:   (0,(SUM/N)^N   ].当且仅当这N个数相等时取得最大值。  
  利用这个定理就很容易解决了(你要了解它的精髓)。  
  另外一点要知道的 ...


楼主的问题是3个数,而且每个数是0.01的整数倍,而且您的4个数加起来是7.110004
作者: azlpub    时间: 2009-3-21 20:06:52

汗,这么大年纪还粗心。
不过貌似去掉两个0也找不到结果。
作者: R'cube    时间: 2009-3-21 20:23:44

貌似得解不定方程~~~~
作者: lulijie    时间: 2009-3-22 12:30:01

确实无解。楼主可能哪里出错了
作者: lulijie    时间: 2009-3-22 20:39:53

既然是价格问题,那么价格都是精确到分的。(即是0.01的倍数)
设3种价格是 0.01*k,0.01*m,0.01*n。
那么相乘得到的7.11,可能是近似值,即四舍五入得到的。
实际上是     7.105<= 0.01*k *0.01*m*0.01*n<7.115
即   k+m+n=711
     7105000<= k*m*n<7115000。
若是这种情况,可解得195种情况。有些是前后顺序不一样,实际上只要33种,如下:
69,313,329;    69,314,328;    69,315,327;    69,316,326;    69,317,325;    69,318,324;    69,319,323;    69,320,322;    69,321,321;    70,286,355;    70,287,354;    71,272,368;    71,273,367;    72,262,377;    73,253,385;    74,245,392;    76,232,403;    77,227,407;    79,217,415;    80,212,419;    81,208,422;    82,204,425;    86,190,435;    87,187,437;    88,184,439;    91,176,444;    93,171,447;    103,151,457;    111,139,461;    114,135,462;    119,129,463;    120,128,463;    121,127,463;
作者: suntong0102    时间: 2009-3-22 22:33:55     标题: 回复 11# 的帖子

请问是怎么做出来的呢?
作者: lulijie    时间: 2009-3-22 22:42:22

哈哈,电脑暴力解得。
作者: suntong0102    时间: 2009-3-22 23:54:50     标题: 回复 13# 的帖子

强悍强悍 呵呵,谢谢
作者: oboe    时间: 2009-3-26 00:09:25

711
7+1+1=9
有因子数3X3
711/9=79
查100以内质数表, 79是个质数.
问题就变成了, 如何放3, 3, 79 使之相加为7.11 ?
这样算就无解.




欢迎光临 魔方吧·中文魔方俱乐部 (http://bbs.mf8-china.com/) Powered by Discuz! X2