zoukankan      html  css  js  c++  java
  • vijosP1543 极值问题

    vijosP1543 极值问题

    链接:https://vijos.org/p/1543

    【题解】(网上)

     从简单情况人手:
        
    设定m1,将m代人方程(n2-n-1)2=1,可求出n=1
             m
    2,代人,有(n2-2n-4)2=1,可求出n=3
             m
    3,代人,有(n2-3n-9)2=1,可求出n=5
             m
    4,代人,有(n2-4n-16)2=1,可知无整数解;
             m
    5,代人,有(n2-5n-25)2=1,可求出n=8
        
    将满足条件的mn排列在一起,有:1 2 3 5 8…
        
    看到上述数列,熟悉Fibonacci数列的应该有些面熟,于是就可以猜测,mn是否为Fibonacci数列中相邻的两项,提出这样的猜想之后,就可以再次设定m=8,可求出n正好等于13,可见猜想成立。提出猜想之后,就应该想办法证明这一猜想。事实上,对条件的等式进行一些数学变换:
        (n2-mn-m2)2=[-(n+m)2+2n2+mn]2=[(n+m)2-n(n+m)-n2]2 =[(n')2-m'n'-(m')2]2
        
    其中:n'=m+nm'=n
        
    由上述数学变换可以得出,若mn为满足条件的一组解,则m'n'也是满足条件的一组解。通过上述证明可知,mn的确是满足Fibonacci数列的相邻两项,即猜想得以证明。再加上题设中要求使得m2+n2的值最大的条件,可知问题的解即为Fibonacci数列中小于k的最大两个相邻数。
        
    由此可见,上述例题的求解方法正是归纳策略一般所要求的三个步骤:从简单情况人手、寻找规律、提出猜想和验证猜想。

    【代码】

      

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int main() {
     5     long long k,f1,f2,f3,tmp,ans;  
     6     cin>>k;
     7     f1=1; f2=1; f3=2;
     8     while(f3<=k) {
     9         tmp=f2+f3;
    10         f1=f2; f2=f3;
    11         f3=tmp;
    12     }
    13     cout<<(long long)(f2*f2+f1*f1);
    14     return 0;
    15 }
  • 相关阅读:
    感触
    十道海量数据处理面试题
    jQuery横向手风琴图片滑块
    源码分享-纯CSS3实现齿轮加载动画
    Unix/Linux环境下多一点不如少一点
    参加中国系统架构师大会感悟
    Sql Server新手学习入门
    程序设计应知道的那些事儿之函数
    Windows 下如何安装配置Snort视频教程
    程序设计应知道的那些事儿
  • 原文地址:https://www.cnblogs.com/lidaxin/p/4872883.html
Copyright © 2011-2022 走看看