极值问题

简介: 对上述方法的更为详细的描述: 解析: 由条件②得出: n^2-mn-m^2+1=0 n^2-mn-m^2-1=0 根据求根公式: n1,2=(m+Δ1,2)/2  n3,4=(m-Δ1,2)/2 其中: Δ1=sqrt(5*m^2+4) Δ2=sqrt(5*m^2-4) (sqrt即为求非负实数平方根) 下面再来考虑条件①.

对上述方法的更为详细的描述:

析:

由条件②得出:

n^2-mn-m^2+1=0

n^2-mn-m^2-1=0

根据求根公式:

n1,2=(m+Δ1,2)/2

 n3,4=(m-Δ1,2)/2

其中:

Δ1=sqrt(5*m^2+4)

Δ2=sqrt(5*m^2-4)

(sqrt即为求非负实数平方根)

下面再来考虑条件①.由于n>1,因此排除了n3和n4存在的可能性,即

n=n1=(m+Δ1)/2   或者   n=n2=(m+Δ2)/2

又由于n和m是整数,因此Δ1和Δ2应为整数.同样,(m+Δ1)/2 和 (m+Δ2)/2也应为整数.

有了上述条件限制和m与n的函数关系式,使得求m^2+n^2值最大的一族m和n就比较方便了.

由于m^2+n^2单调递增,因此我们从m=k出发,按递减方向将m值代入n的求根公式.只要Δ1(或Δ2)为整数,n1(或n2)为整数且小于k,则得出的一组m和n一定使m^2+n^2的值最大.

代码如下:

   
int m,n,k;
    double delt1,delt2,n1,n2;
    scanf("%d",&k);
    for(m=k;m>=1;m--)
    {
        delt1=sqrt(5*m*m+4);
        n1=(m+delt1)/2;
        n=n1;
        if(n==n1&&n<=k) break;
        delt2=sqrt(5*m*m-4);
        n2=(m+delt2)/2;
        n=n2;
        if(n==n2&&n<=k) break;
    }
    printf("%d %d\n",m,n);

 

 

标准答案是:

1、输入k,n ← 1, m ← 1

2、t ← n+m

3、若 t ≤ k,则 m ← n, n ← t,转下一步

4、若t ≤ k,则返回第2步,否则转下一步

5、输出m、n,结束

 

代码如下:

      

    int n=1,m=1,k,t;
    cin>>k;
    do
    {
        t=n+m;
        if(t<=k)
        {
            m=n;
                n=t;
        }
    }
    while(t<=k);
    cout<<"m="<<m<<endl<<"n="<<n;

 

相关文章
|
4月前
|
机器学习/深度学习
299: 平方和
299: 平方和
|
3月前
|
机器学习/深度学习 算法 Serverless
代价函数详解
代价函数详解
|
存储 调度 Python
泊松分布
泊松分布
170 0
泊松分布
|
机器学习/深度学习 算法 开发者
不等式约束条件下求极值1| 学习笔记
快速学习不等式约束条件下求极值1。
540 0
不等式约束条件下求极值1| 学习笔记
|
机器学习/深度学习 算法 开发者
不等式约束条件下求极值2| 学习笔记
快速学习不等式约束条件下求极值2。
1240 0
不等式约束条件下求极值2| 学习笔记
|
机器学习/深度学习 算法 开发者
不等式约束条件下求极值3| 学习笔记
快速学习不等式约束条件下求极值3。
129 0
不等式约束条件下求极值3| 学习笔记