用c++写6、极值问题(acme) 【问题描述】 已知 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。 【输入样例】 1995 【输出样例】 m=987 n=1597
时间: 2024-04-08 18:35:15 浏览: 108
以下是使用C++编写的解决方案:
```cpp
#include <iostream>
#include <cmath>
std::pair<int, int> findMaxSum(int k) {
int maxSum = 0;
int maxM = 0;
int maxN = 0;
for (int m = 1; m <= k; m++) {
for (int n = 1; n <= k; n++) {
if (std::pow(n * n - m * n - m * m, 2) == 1) {
int currSum = m * m + n * n;
if (currSum > maxSum) {
maxSum = currSum;
maxM = m;
maxN = n;
}
}
}
}
return std::make_pair(maxM, maxN);
}
int main() {
int k;
std::cout << "请输入正整数k:";
std::cin >> k;
std::pair<int, int> result = findMaxSum(k);
std::cout << "m = " << result.first << std::endl;
std::cout << "n = " << result.second << std::endl;
return 0;
}
```
对于输入样例1995,该代码将输出:
```
m = 987
n = 1597
```
请注意,由于要遍历所有可能的m和n值,对于较大的输入k,此算法可能需要较长的计算时间来产生结果。
阅读全文