7-11问题 一位顾客在7-11买了4件商品,这4件商品相乘的价格是7.11元,相加的价格也是7.11元,请用蛮力法编写程序,输出这4件商品的价格分别是多少。 思路:蛮力(暴力)法 约束条件就2个,a+b+c+d=7.11,abcd=7.11。写3个for循环遍历出所有答案即可 坑点:C/C++浮点数误差分析 如上图,C语言的浮点数是有一定误差的,在误差范围内,我们一般默认实际值为正确答案 难点: 本题难点就在于如何解决该误差 方法1: 避免浮点数的计算 #include<iostream>#include<math.h>using namespace std; /*711000000*/ /*2147483648*/ int main() { double a,b,c,d; cout<<"a\tb\tc\td"<<endl; for(a=1;a<711;a++) for(b=1;b<711;b++) for(c=1;c<711;c++) { d=711-(a+b+c); if(a*b*c*d==711000000) { cout<<a/100<<"\t"<<b/100<<"\t"<<c/100<<"\t"<<d/100<<endl; } } return 0; } 方法2: 标明精度进行运算 #include<iostream>#include<math.h>using namespace std; /*711000000*/ /*2147483648*/ int main() { double a,b,c,d; cout<<"a\tb\tc\td"<<endl; for(a=0.01;a<7.11;a=a+0.01) for(b=0.01;b<7.11;b=b+0.01) for(c=0.01;c<7.11;c=c+0.01) { d=7.11-(a+b+c); if(fabs(a*b*c*d-7.11)<10e-8) { cout<<a<<"\t"<<b<<"\t"<<c<<"\t"<<d<<endl; } } return 0; } ……

阅读全文