2012 蓝桥杯【初赛试题】卖鸡蛋

题目描述:

    大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子。她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。

    欧拉随便问:“卖了多少鸡蛋呢?”

    不料一个说:“我们两人自己卖自己的,一共卖了150个鸡蛋,虽然我们卖的鸡蛋有多有少,但刚好得了同样的钱数。你猜猜看!”

    欧拉猜不出。

    另一个补充道:“如果我按她那样的价格卖,可以得到32元;如果她按我的价格卖,可以得到24.5元”。

    欧拉想了想,说出了正确答案。

    我们不是数学家,懒得列出公式来分析。但计算机可以“暴力破解”,就是把所有可能情况都试验一遍,撞上为止!

    请写出每人鸡蛋的数目(顺序不限),用逗号隔开。

    答案写在“解答.txt”中,不要写在这里!


思路:题目说要用暴力搜索,其实暴力搜索也是需要先梳理优化好再暴力的,

假设两人卖得鸡蛋数目为x,y,价钱分别为m1,m2。

根据题目所给条件,有以下公式:

x+y=150;x*m1=y*m2;x*m2=32;y*m1=24.5;

第一次写就是按照题目给的意思,暴力了一回,结果是无脑暴力,没有结果

献上失败代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int x,y;
    double m1,m2;
    for(x=1;x<=150;x++)
    for(y=1;y<=150;y++)
    for(m1=0.1;m1<=2;m1+=0.1)
    for(m2=0.1;m2<=2;m2+=0.1)
    {
       if(x+y==150&&x*m1==y*m2&&x*m2==21&&y+m1==24.5)
       {
          printf("x=%d y=%d\n",x,y);
       }
    }
    system("pause");
    return 0;
}

后来才发现,m1与m2并不是必需的,因为浮点数和整数的运算可能会出现偏差,后来拿笔在纸上画了一下公式

发现m1和m2是可以消去的,这就省了不少事

已知x*m2=32,y*m1=24.5;那么m2=32/x,m1=24.5/y;带入"x*m1=y*m2"式子则有x*x*24.5=32*y*y;

最后综合上面所给的式子化出了x、y的对应关系:

x*x*24.5==32*y*y(范围1到150)

AC代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int x,y;
    double m1,m2;
    for(x=1;x<=150;x++)
    {
       y=150-x;
       if(x*x*24.5==32*y*y)
       {
          printf("x=%d y=%d\n",x,y);
       }
    }
    system("pause");
    return 0;
}

最后答案:x=80 y=70


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值