检查变量是否包含特定数字

时间:2019-07-06 17:10:54

标签: c++ math

我制作了一个程序来求解公式{f(y)=面积/ y},该公式计算矩形的高度和宽度[X和Y]以使其具有特定的面积,同时,高度和宽度之间有特定的比例{1.0539435519260202716443150560307}。

程序在Y的公式上应用数字[Xmin,Xmax]的范围,并在一行中打印出Y,X和X / Y比,并且循环增加了将要应用的数字。 ”。每次循环结束。

所以问题是,为了找到最准确的比率(最接近我需要的比率),我需要将步长做得太小,但这给了我成千上万的结果,这对我来说是无法手动完成的搜索它,所以我希望程序只打印比率至少包含数字{1.053}的行,以便确保它太接近我想要的原始比率,我尝试了很多搜索,但是看起来所有可用的方法仅适用于字符串,因此有人可以向我建议解决方法/逻辑,甚至可以采用完全不同的方法吗?加上我尝试过vb.net语言,但相同,它仅适用于字符串。

这是代码:-

(变量声明没有被stackoverflow突出显示,因此我将其删除,但是我为四个变量设置了“ double”数据类型)。

cout << "Enter Area" << endl;
cin >> area;
cout << "Enter Xmin" << endl;
cin >> Xmin;
cout << "Enter Xmax" << endl;
cin >> Xmax;
cout << "Enter Step" << endl;
cin >> step;

double x, y, multi, ratio;

for (double i = Xmin; i <= Xmax; i += step)
{
    x = i;
    y = area / x;
    multi = x * y;
    ratio = x / y;

    cout << "y = " << y << "     X = " << x << "     Ratio  =  " << ratio << endl;

}
system("pause");

这是没有办法的,还有其他支持这种简单任务的编程语言吗?

2 个答案:

答案 0 :(得分:2)

这可以通过一些简单的代数来完成:

我们有x * y = areax / y = ratio。您可以通过两种方法来求解此方程组,例如将两个方程相乘得到x^2 = area * ratiox = sqrt(area * ratio)这样。将两个方程式相除得到y^2 = area / ratio,所以y = sqrt(area / ratio)

答案 1 :(得分:0)

尝试一下:

const double requestedRatio = 1.0539435519260202716443150560307;

while(Xmax - Xmin >= 0.00000000001)
{
    x = (Xmax + Xmin) * 0.5;
    y = area / x;
    multi = x * y;
    ratio = x / y;

    if (ratio < requestedRatio) Xmin = x;
    else Xmax = x;
}    
cout << "y = " << y << "     X = " << x << "     Ratio  =  " << ratio << endl;

这是经典的二进制搜索。您从搜索范围Xmin:Xmax开始。将其分成两半,然后选择与您的预期结果“更接近”的部分。结果,您可以根据需要找到x接近所需比率-只需修改while条件。