Java 给定长度可以形成多少个不同的三角形

Java 给定长度可以形成多少个不同的三角形,java,Java,我想从用户那里得到一个数字,并计算在给定长度下可以形成多少个不同的三角形,例如: 5(2-2-1) 回答:1 12(5,5,2)(3,4,5)(4,4,4) 回答:3 我已经写了一些代码,但我想用一种更快的方法来实现。 这是我的密码: public static void main(String[] args) { Scanner input = new Scanner(System.in); int t = input.nextInt(); int value = 0; for (

我想从用户那里得到一个数字,并计算在给定长度下可以形成多少个不同的三角形,例如:

5(2-2-1)

回答:1

12(5,5,2)(3,4,5)(4,4,4)

回答:3

我已经写了一些代码,但我想用一种更快的方法来实现。 这是我的密码:

public static void main(String[] args) {

  Scanner input = new Scanner(System.in);
  int t = input.nextInt();

int value = 0;
for (int i = 1; i < t; i++) {
       for (int j = i; j < t; j++) {
           for (int h = j; h < t; h++) {
              if (i+h+j == t & i+j > h & i+h > j & h+j > i)  value++;  
           }   
       }
}

    System.out.println(value);


} 
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(System.in);
int t=input.nextInt();
int值=0;
for(int i=1;ih&i+h>j&h+j>i)值++;
}   
}
}
系统输出打印项次(值);
} 
您可以轻松地将其设置为O(n^2)

for(int i=1;i
您可以在O(1)中完成:


使用。

有些答案是否定的,请检查并更正@这是由于溢出造成的。我回答中的语句使用整数。如果您想计算ns>46000的值,则必须使用更大的数据类型,如long.@erfan.sajjadie,我已对其进行了编辑,以便它适用于每个正整数n。如果要将可能的三角形数存储在整数中,则只适用于(大约)n<300000的情况,因为在这种情况下,可能的三角形数将超过整数范围。
for (int i = 1; i < t; i++) {
       for (int j = i; j < t; j++) {
          int h=t-i-j;
           //check in O(1)
   }
}
int n = input.nextInt();
long value = Math.round(((long)n*n)/12d) - ((long)n/4)*(((long)n + 2)/4);