极值问题-(斐波那契数列)
来源:互联网 发布:mac开机后怎么换系统 编辑:程序博客网 时间:2024/06/05 02:29
已知m、n为整数,且满足下列两个条件:
① m、n∈{1,2,…,k},即1≤m,n≤k ②(n2-m*n-m2)2=1 你的任务是:编程输入正整数k(1≤k≤109),求一组满足上述两个条件的m、n,并且使m2+n2的值最大。例如,从键盘输入k=1995,则输出:m=987 n=1597。
输入
输入正整数k(1≤k≤109)
输出
输出满足条件的m、n,并且使m2+n2的值最大。
样例输入
1995
样例输出
m=987
n=1597
分析 咋一看好像很麻烦的, 开动机智的小脑袋瓜就可以想出来啦hhhh
咳咳 其实是对条件中的公式进行变形
(n^2 -n*m-m^2)^2=1
( m^2+n*m-n^2 )^2 =1
( m^2+n*m-n^2 )= m^2+2*n*m+n^2-m*n-2*n^2;
( m^2+n*m-n^2 )=(m+n)^2-m*n-2*n^2;
综上 可推出
(n^2 -n*m-m^2)^2=((m+n)^2-(m+n)*n-n^2)^2
即 m->n,n->m+n;
嘿嘿嘿 这个时候 我们从最简单的情况带入;
带入m=1时,解出n=1;
带入m=2时,解出n=3;
带入m=3时,解出n=5;
带入m=4时,无解;
带入 m=5时,解出n=8;
……….
1,1,2,3,5,8,……..这 这 这 不就是传说中的斐波那契数列嘛??!!!
得出规律,n,m时斐波那契数列中相邻的两个数。即 求出斐波那契数列中<=k的相邻的两个数即可。 如果还是不理解的话 就看代码吧。
#include<bits/stdc++.h>using namespace std;int n,m,k;int main (void){ while(cin>>k){ int n=1,m=1,p=m+n; while(p<=k){m=n,n=p,p=m+n;} printf("m=%d\nn=%d",m,n); } return 0;}
阅读全文
0 0
- 极值问题(斐波那契数列)
- 极值问题-(斐波那契数列)
- vijos - P1543极值问题(斐波那契数列 + 公式推导 + python)
- SSL2280 极值问题(递推,斐波那契)
- 斐波那契数列问题
- 斐波那契数列问题
- 斐波那契数列{大数问题}
- 斐波那契数列系列问题
- 斐波那契数列问题
- 兔子问题(斐波那契数列)
- 斐波那契数列-台阶问题
- 兔子问题--斐波那契数列
- 斐波那契数列问题
- FizzBuzz问题&&斐波那契数列
- 斐波那契数列问题汇总
- 斐波那契数列:兔子问题
- 蜜蜂问题- 斐波那契数列
- 斐波那契数列问题
- caffe源码解读之Blob
- 1050: 阶乘的累加和
- 工作与生活真的可以平衡吗
- 浅谈大型分布式系统Redis内存数据库实践
- HDU 6130 Kolakoski
- 极值问题-(斐波那契数列)
- 2017-8-15
- ZOJ 3432 Find the Lost Sock(模拟)
- glibc源码分析之chmod系列函数
- nmcli中的几种模式
- java后端学习流程
- 数据库不允许保存更改
- POJ 1383 Labyrinth (技巧BFS)
- 大小端