zoukankan      html  css  js  c++  java
  • [蓝桥杯历届试题] 欧拉与鸡蛋

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

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

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

    欧拉猜不出。

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

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

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

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

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

    参考答案:

    70,80 或 80,70


    解题思路:

    枚举。但是需要注意的是 中间过程涉及到小数的得到最终结果的两个数比较是否相等,会出问题。比如,下面的代码:

    #include <iostream>
    using namespace std;
    
    int anum,bnum;
    double aprice,bprice;
    
    int main()
    {
    	for(anum=1;anum<150;anum++)
    	{
    		bnum=150-anum;
    		bprice=32.0/anum; //涉及到小数的保留 
    		aprice=24.5/bnum;
    		if(anum*aprice==bnum*bprice)
    		{
    			cout<<anum<<" "<<bnum<<endl;
    		}
    	}
    	return 0;
    } 

    结果这个程序什么也不输出。

    换一种思路,把小数比较换做整数比较,即不进行小数计算, 上面的比较可以换成 anum*24.5/bnum和 bnum*32/anum的比较, 即 相除,即比较分子分母是否相等就可以了,即比较  320*bnum*bnum  和 245*anum*anum是否相等即可。


    代码:

    #include <iostream>
    using namespace std;
    int anum,bnum;
    
    int main()
    {
    	for(anum=1;anum<150;anum++)
    	{
    		bnum=150-anum;
    		if(320*bnum*bnum==245*anum*anum)
    		{
    			cout<<anum<<" "<<bnum<<endl;
    		}
    	}
    	return 0;
    }
    


  • 相关阅读:
    mybatis N+1问题解决
    Best Time to Buy and Sell Stock
    119. Pascal's Triangle II
    HBuilder打包ios
    关于JavaScript/TypeScript中的setTimeout和setInterval
    白色透明渐变css
    AntV 在小程序中的使用
    AntV 在h5页面中的使用
    js处理后端返回超过16位大数字方案(network中preview和response返回不一致)
    m站taro编译css的时候有些属性会被编译掉,如果遇到这个问题,用第一行代码,写到无法编译的代码上面
  • 原文地址:https://www.cnblogs.com/vivider/p/3697705.html
Copyright © 2011-2022 走看看