A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*欧拉与鸡蛋
大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子。
她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。
欧拉随便问:“卖了多少鸡蛋呢?”
不料一个说:“我们两人自己卖自己的,一共卖了150个鸡蛋,虽然我们卖的鸡蛋有多有少,
但刚好得了同样的钱数。你猜猜看!”
欧拉猜不出。
另一个补充道:“如果我按她那样的价格卖,可以得到32元;如果她按我的价格卖,可以得到24.5元”。
欧拉想了想,说出了正确答案。

我们不是数学家,懒得列出公式来分析。但计算机可以“暴力破解”,
就是把所有可能情况都试验一遍,撞上为止!
请写出每人鸡蛋的数目(顺序不限),用逗号隔开。

*/  

9 个回复

倒序浏览
不知道有没有错....没有结果出来....
#include <stdio.h>
int main()
{
    // 第一个人卖的个数
    for(int firstPSEggs = 1;firstPSEggs < 150;firstPSEggs++)
    {
        // 第二个人卖的个数
        for(int secondPSEggs = 1;secondPSEggs < 150;secondPSEggs++)
        {
            /* 32 / 第二个人的单价 == 第一个人卖的个数
               32 / 第一个人卖的个数 == 第二个人的单价 */
            double twoUnitPrice = (double)32 / firstPSEggs;
            
            /* 24.5 / 第一个人的单价 == 第二个人卖的个数
               24.5 / 第二个人卖的个数 == 第一个人的单价 */
            double oneUnitPrice = (double)24.5 / secondPSEggs;
            
            // 虽然我们卖的鸡蛋有多有少,但刚好得了同样的钱数
            if (oneUnitPrice * firstPSEggs == twoUnitPrice * secondPSEggs)
            {
                // 一共卖了150个鸡蛋
                if((firstPSEggs + secondPSEggs) == 150)
                {
                    printf("第一个人卖了:%d个\n", firstPSEggs);
                    printf("第二个人卖了:%d个\n", secondPSEggs);
                }
            }
        }
    }
   
    return 0;
}

回复 使用道具 举报
我看着就晕了
回复 使用道具 举报
好吧,才有点思路,看了半天
回复 使用道具 举报

  1. #import <Foundation/Foundation.h>

  2. int main(int argc, const char * argv[]) {
  3.     @autoreleasepool {
  4.         //for遍历,i为第一个农妇卖出去的鸡蛋
  5.         for (int i=1;i<=150;i++) {
  6.             //逻辑关系,利用两个卖出去的钱相等,并且第一个以第二个的价钱卖得到32,第一个以第二个的价钱卖得到24.5
  7.             //则可以列出(money/i)第一个农妇的单价*(150-i)第二个农妇个数=24.5,整理一下可以得到 money=i*(24.5/(150-i);同理可以得到money=(150-i)*(32.0/i);
  8.             if ((150-i)*(32.0/i)==i*(24.5/(150-i))) {
  9.                 NSLog(@"第一个农妇卖出的鸡蛋个数为%d,第二个农妇卖出的鸡蛋个数为%d",i,150-i);
  10.                 //2016-07-23 14:14:42.706 hh[662:52946] 第一个农妇卖出的鸡蛋个数为80,第二个农妇卖出的鸡蛋个数为70
  11.             };
  12.                      
  13.      
  14.         }
  15.     }
  16.     return 0;
  17. }
复制代码
回复 使用道具 举报
  1. c语言解法,这题不难,重点是把握两个人卖的钱一样这样一个连接点,其他的就是穷举式查找
  2. #include <stdio.h>

  3. int main(int argc, const char * argv[]) {
  4.     // insert code here...
  5.    
  6.    
  7.     for(int i = 1;i<150;i++)
  8.     {
  9.         for(int j = 1;j<150;j++)
  10.         {
  11.             if((i*(32.0/(150-i)))==(j*(24.5/(150-j)))) printf("%d,%d",i,j);
  12.         }
  13.     }
  14.     return 0;
  15. }
复制代码
回复 使用道具 举报
二元一次方程组吧,然后用for循环遍历150
回复 使用道具 举报
回复 使用道具 举报

这个不对吧,你没有用到i+j=150的已知条件,而且用不着两个循环
回复 使用道具 举报
hanmaoChen 发表于 2016-7-25 11:59
这个不对吧,你没有用到i+j=150的已知条件,而且用不着两个循环

间接使用到了,I和J设为两个人有可能卖的蛋,穷举是种思路,如果数学不错,可以尝试用方程式去推,但一来消耗时间,二来的话,这个双重循环的穷举没有很消耗内存,32除以150-I代表一个人的单价,24.5除以150-j代表另一个人的单价,单价乘以个数,等于两人卖的钱,两人卖的钱相等,则意味着I和J这两个变量被找到了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马