Java实现三角形计数

题:

  

解:

  这道题考的是穷举的算法。

  一开始看到这道题的时候,本能的想到用递归实现。但使用递归的话数据少没问题,数据多了之后会抛栈溢出的异常。我查了一下,原因是使用递归创建了太多的变量,

  每个变量创建的时候都会有一个“栈帧”,而Java虚拟机对栈帧有限制,不能超出一个范围。

  并且递归和循环相比,递归的效率明显比循环低下,如果想要写一个算法的话,尽量不要使用递归,一方面是因为递归会创建很多变量,占用内存,另一方面是递归极容

  易无限递归。

  ---------------

  最后使用循环嵌套的方式完成了。

代码:

  

 1 package com.lintcode;
 2
 3 /**
 4  * 三角形计数
 5  * 给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,
 6  * 问,可以寻找到多少组这样的三个数来组成三角形?
 7  * @author Administrator
 8  */
 9 public class Test_003 {
10 //    这道题不能用递归,数据少的话还可以,但是多了就会堆栈溢出。
11 //    这道题就是考“穷举”,列出所有的可能性,再判断。三角形三个边需要三个数字,就循环嵌套三层。
12 //    然后找出三个数字中最大的和最小的和中间数,判断是否构成三角形。
13     /**
14      * @param args
15      */
16     public static void main(String[] args) {
17         int[] S = new int[200];
18         for (int i = 0; i < 200; i++) {
19             S[i] = i+1;
20         }
21         int count = triangleCount(S);
22         System.out.println(count);
23     }
24
25     public static int triangleCount(int S[]) {
26         int count = 0;
27         for(int i=0; i<S.length-2; i++){//第一条边
28             for (int j = i+1; j < S.length-1; j++) {//第二条边
29                 for (int k = j+1; k < S.length; k++) {//第三条边
30                     int min = getMin(S[i],S[j],S[k]);
31                     int max = getMax(S[i],S[j],S[k]);
32                     int middle = S[i]+S[j]+S[k]-min-max;
33                     if ((min+middle)>max || (min==max)) {
34                         count++;
35                     }
36                 }
37             }
38         }
39         return count;
40     }
41     //求最小值
42     private static int getMin(int a, int b, int c) {
43         int min = a;
44         if (min>b) {
45             min=b;
46         }
47         if (min>c) {
48             min=c;
49         }
50         return min;
51     }
52     //求最大值
53     private static int getMax(int a, int b, int c) {
54         int max = a;
55         if (max<b) {
56             max=b;
57         }
58         if (max<c) {
59             max=c;
60         }
61         return max;
62     }
63 }
时间: 2024-10-10 08:10:08

Java实现三角形计数的相关文章

java中的计数信号量(Counting Semaphore)

信号量(Semaphore)又称为信号量.旗语,它以一个整数变数,提供信号,以确保在并行计算环境中,不同进程在访问共享资源时,不会发生冲突.是一种不需要使用忙碌等待(busy waiting)的一种方法. 信号量的概念是由荷兰计算机科学家艾兹格·迪杰斯特拉(Edsger W. Dijkstra)发明的,广泛的应用于不同的操作系统中.在系统中,给予每一个进程一个信号量,代表每个进程目前的状态,未得到控制权的进程会在特定地方被强迫停下来,等待可以继续进行的信号到来.如果信号量是一个任意的整数,通常被

洛谷 P2807 三角形计数

P2807 三角形计数 题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入输出格式 输入格式: 第一行为整数t(≤100),表示测试数据组数:接下来t行,每行一个正整数n(≤500). 输出格式: 对于每个n,输出一个正整数,表示三角形个数. 输入输出样例 输入样例#1: 复制 3 1 2 3 输出样例#1: 复制 1 5 13 说明 n(≤500) t(≤10

算法-java代码实现计数排序

计数排序 第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class CountingSort { 4 public int[] countingSort(int[] A, int n) { 5 countingSo

第六届蓝桥杯java试题-三角形面积

三角形面积 如[图1]所示.图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何多余内容或说明性文字. 答案是:28 更多java资源尽在java教程网

使用junit对java中三角形测试

Tasks: Install Junit(4.12), Hamcrest(1.3) with Eclipse Install Eclemma with Eclipse Write a java program for the triangle problem and test the program with Junit. 关于三角形问题的代码的链接如下: https://github.com/Cartisia/triangle 部分如下: 1.安装并运用junit, hamcrest and 

java中科学计数法数字转字符串

开发过程中有可能会遇到很小的数字,在显示过程中就转换成了科学计数法,这种不利于人的观看,于是就有必要转成字符串形式的.so. 将科学计数法的数字转换成字符串: 使用的是java.math的BigDecimal: BigDecimal bd = new BigDecimal("1.1920928955078125e-7"); String str = bd.toPlainString(); 显示结果: 0.00000011920928955078125 亲测好使..

java编程三角形(Triangle类)继承

import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.println("请输入三角形的三条边,颜色,是否填充(true or false)"); Scanner input=new Scanner(System.in); double side1=input.nextDouble(); double side2=input.nextDouble(

python实现指定目录下JAVA文件单词计数的多进程版本

要说明的是, 串行版本足够快了, 在我的酷睿双核 debian7.6 下运行只要 0.2s , 简直是难以超越. 多进程版本难以避免大量的进程创建和数据同步与传输开销, 性能反而不如串行版本, 只能作为学习的示例了. 以后再优化吧. #------------------------------------------------------------------------------- # Name: wordstat_multiprocessing.py # Purpose: stati

Java把科学计数法转换为字符串

/**  * 把科学计数法转换为字符串  * 1.64607507E8(转化为164607507).1.6.0.0.0  * @param str  * @return  */ private static String number2PlainString(String str){ BigDecimal bd = new BigDecimal(str); return bd.toPlainString(); }