算法_趣味整数_Question9_勾股数(java实现)

这篇文章讲述的是算法趣味整数部分的勾股数问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。

问题描述

求100以内的所有勾股数,所谓勾股数,是指能够构成直角三角形三边的整数(a,b,c),即满足a*a+b*b=c*c

算法分析

穷举法使用三个循环确定a,b,c的值,再判断条件即可

代码实现

package funnyInteger;
/**
 * @author 叶清逸
 * @date 2018年7月14日下午8:47:25
 * @version 1.0
 * @project funnyInteger
 */
public class Q9_PythagoreanNumber {
    /**
     * 问题分析:求100以内的所有勾股数,所谓勾股数,是指能够构成直角三角形三边的整数
     *          (a,b,c),即满足a*a+b*b=c*c
     * 
     * 算法分析:穷举法使用三个循环确定a,b,c的值,再判断条件即可
     */
    public static void main(String[] args) {
        method1() ;
        //method2() ;
    }
    /*方法一:穷举法,时间复杂度为O(n*n*n)*/
    private static void method1(){
        /*使用n变量统计结果个数*/
        int n = 1 ;
        System.out.println("100以内的勾股数如下:");
        /*定义三层循环确定a,b,c的值*/
        for(int a=1 ; a<=100 ; a++)
            for(int b=a+1 ; b<=100 ; b++)
                for(int c=b+1 ; c<=100 ;c++){
                    /*判断条件*/
                    if(a*a+b*b==c*c){
                        System.out.printf("%-3d %-3d %-3d  ",a,b,c);
                        /*方便观察结果,每4个换行*/
                        if(n%4 == 0 )
                            System.out.println();
                        n++ ;
                    }
                }
        System.out.println("共"+n+"个");
    }
    /*方法二:穷举法,时间复杂度为O(n*n)*/
    private static void method2(){
        /*使用n变量统计结果个数*/
        int n = 1 ;
        System.out.println("100以内的勾股数如下:");
        /*定义三层循环确定a,b,c的值*/
        for(int a=1 ; a<=100 ; a++)
            for(int b=a+1 ; b<=100 ; b++){
                int c = (int)Math.sqrt(a*a+b*b) ;
                /*判断条件*/
                if(a*a+b*b==c*c && a+b>c && a+c>b && c<=100){
                    System.out.printf("%-3d %-3d %-3d  ",a,b,c);
                    /*方便观察结果,每4个换行*/
                    if(n%4 == 0 )
                        System.out.println();
                    n++ ;
                }
            }
        System.out.println("共"+n+"个");
    }
}

样例输出

100以内的勾股数如下:
3   4   5    5   12  13   6   8   10   7   24  25   
8   15  17   9   12  15   9   40  41   10  24  26   
11  60  61   12  16  20   12  35  37   13  84  85   
14  48  50   15  20  25   15  36  39   16  30  34   
16  63  65   18  24  30   18  80  82   20  21  29   
20  48  52   21  28  35   21  72  75   24  32  40   
24  45  51   24  70  74   25  60  65   27  36  45   
28  45  53   28  96  100  30  40  50   30  72  78   
32  60  68   33  44  55   33  56  65   35  84  91   
36  48  60   36  77  85   39  52  65   39  80  89   
40  42  58   40  75  85   42  56  70   45  60  75   
48  55  73   48  64  80   51  68  85   54  72  90   
57  76  95   60  63  87   60  80  100  65  72  97   
共53个

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/81047674