给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形?
样例
例如,给定数组 S = {3,4,6,7},返回 3
其中我们可以找到的三个三角形为:
{3,4,6}
{3,6,7}
{4,6,7}
给定数组 S = {4,4,4,4}, 返回 4
其中我们可以找到的三个三角形为:
{4(1),4(2),4(3)}
{4(1),4(2),4(4)}
{4(1),4(3),4(4)}
样例
例如,给定数组 S = {3,4,6,7},返回 3
其中我们可以找到的三个三角形为:
{3,4,6}
{3,6,7}
{4,6,7}
给定数组 S = {4,4,4,4}, 返回 4
其中我们可以找到的三个三角形为:
{4(1),4(2),4(3)}
{4(1),4(2),4(4)}
{4(1),4(3),4(4)}
{4(2),4(3),4(4)}
import java.util.ArrayList;
import java.util.Scanner;
/**
* 给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形?
样例
例如,给定数组 S = {3,4,6,7},返回 3
其中我们可以找到的三个三角形为:
{3,4,6}
{3,6,7}
{4,6,7}
给定数组 S = {4,4,4,4}, 返回 4
其中我们可以找到的三个三角形为:
{4(1),4(2),4(3)}
{4(1),4(2),4(4)}
{4(1),4(3),4(4)}
{4(2),4(3),4(4)}
*
* @author Dell
*
*/
public abstract class Test382 {
public static int triangleCount(int[]S)
{
int sum=0;
ArrayList<Integer> list=new ArrayList<>();
ArrayList<ArrayList<Integer>> result=new ArrayList<>();
backtracking(S,0,0,list,result);
for(int i=0;i<result.size();i++)
{
if(istriangle(result.get(i),S))
{
sum++;
}
}
return sum;
}
public static boolean istriangle(ArrayList<Integer> list,int[] S)
{ boolean flag=false;
int a=S[list.get(0)];
int b=S[list.get(1)];
int c=S[list.get(2)];
if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&&b+c>a&&a-b<c&&a-c<b&&b-c<a)
{
flag=true;
}
return flag;
}
public static void backtracking(int[]a, int start, int k,ArrayList<Integer> list, ArrayList<ArrayList<Integer>> result)
{
if(k==3)
result.add(new ArrayList<>(list));
else{
for(int i=start;i<a.length;i++)
{
list.add(i);
backtracking(a,i+1,k+1,list,result);
list.remove(list.size()-1);
}
}
}
public static int triangleCount1(int[]S)
{ int sum=0;
for(int i=0;i<S.length;i++)
{
for(int j=i+1;j<S.length;j++)
{
for(int k=j+1;k<S.length;k++)
{
if(S[i]>0&&S[j]>0&&S[k]>0&&S[i]+S[j]>S[k]&&S[i]+S[k]>S[j]&&S[j]+S[k]>S[i]&&S[i]-S[j]<S[k]&&S[j]-S[k]<S[i]&&S[i]-S[k]<S[j])
{
sum++;
}
}
}
}
return sum;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] a=new int[n];
for(int i=0;i<a.length;i++)
{
a[i]=sc.nextInt();
}
//System.out.println(triangleCount(a));
System.out.println(triangleCount1(a));
}
}