题意 给出一系列数字,判断其中哪三个数字可以构成一个三角形,如果有多个,输出周长最大的那个,如果没有输出 - 1
思路 数据较小,所有情况FOR一遍 判断一下
AC代码
#include <cstdio> #include <cstring> #include <ctype.h> #include <cstdlib> #include <iostream> #include <algorithm> #include <cmath> #include <deque> #include <vector> #include <queue> #include <string> #include <map> #include <stack> #include <set> #include <numeric> #include <sstream> using namespace std; typedef long long LL; const double PI = 3.14159265358979323846264338327; const double E = 2.718281828459; const double eps = 1e-6; const int MAXN = 0x3f3f3f3f; const int MINN = 0xc0c0c0c0; const int maxn = 50 + 5; const int MOD = 1e9 + 7; LL a[maxn]; bool judge(LL b[]) { if (b[0] + b[1] > b[2]) return true; return false; } int main() { int n; cin >> n; LL b[3], ans[3]; LL MAX = MINN; for (int i = 0; i < n; i++) scanf("%lld", &a[i]); sort(a, a + n); int i, j, k; for (i = 0; i < n; i++) { for(j = i + 1; j < n; j++) { for (k = j + 1; k < n; k++) { b[0] = a[i]; b[1] = a[j]; b[2] = a[k]; sort(b, b + 3); if (judge(b)) { LL temp = b[0] + b[1] + b[2]; if (temp > MAX) { for (int l = 0; l < 3; l++) ans[l] = b[l]; MAX = temp; } } } } } if (MAX != MINN) { printf("%lld %lld %lld\n", ans[0], ans[1], ans[2]); } else cout << -1 << endl; }转载于:https://www.cnblogs.com/Dup4/p/9433278.html