首先输入一个正整数N,接下来的一行共有N个正整数表示每个木棒的长度。
N ≤ 50, 木棒的长度 ≤ 10000.
输出一个整数表示方法数。
5 1 2 3 4 5
3
public static int sanjiaoxing(int[] arrys) { int n = 0; int length = arrys.length; for (int i = 0; i < length - 2; i++) { for (int j = i + 1; j < length - 1; j++) { for (int k = j + 1; k < length; k++) { if (arrys[i] < arrys[j] + arrys[k] && arrys[j] < arrys[i] + arrys[k] && arrys[k] < arrys[i] + arrys[j]) { n++; } } } } return n; }
/**
* 算法的复杂度是O(n平方)
* 思路是穷举顺序依次取两条边(i,j),i是从2开始(不可能从1开始),j是从i+1开始
* */
public static int countOfTriangle(int max) {
if (max <= 3) {
return 0;
}
int count = 0;
// i最大的是:max - 2,所以i < max - 1
for (int i = 2; i < max - 1; i++) {
for (int j = i + 1; j < max; j++) { // j 最大的是:max - 1,所以j < max
// 第三条边最小的可能值
int minK = j + 1;
// 第三条边最大的可能值
int maxK = Math.min(max, i + j - 1);
int kCount = 0;
if (maxK >= minK) {
kCount = maxK - minK + 1;
}
count += kCount;
}
}
return count;
}