9、极值问题 【问题描述】 已知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。 【输入样例】Acme.in 1995 【输出样例】Acme.out m=987 n=1597
# include<stdio.h> long long f[10005]; int main(){ int n; scanf("%d",&n); f[1]=1; f[0]=1; f[2]=2; int i; if(n<=1) { printf("2\n"); } else for(i=3;;i++) //两种可能的情况 { f[i]=f[i-1]+f[i-2]; if(f[i]>n) //注意 { printf("%lld\n",f[i-1]*f[i-1]+f[i-2]*f[i-2]); break; } else if(f[i]==n) //注意 { printf("%lld\n",f[i]*f[i]+f[i-1]*f[i-1]); break; } } return 0; }