算法题(1)

参考:十道简单算法题java打印杨辉三角String和字符数组互转

 

public class Test {

    /**
     * 1-n的阶乘之和
     */
    public static int Factorial(int n) {
        if(n==1){
            return 1;
        }else{
            return Factorial(n-1)*n;
        }
    }

    /**
     * 求出二维数组每列的最小值
     */
    public static int[] minArray(int[][] arr) {
        int[] res = new int[arr.length];
        for (int i=0;i<res.length;i++){
            int[] s = arr[i];
            int min = s[0];
            for (int j=0;j<s.length;j++){
                if(s[j]<min){
                    min = s[j];
                }
            }
            res[i] = min;
        }
        return res;
    }

    /**
     * 求出二维数组每列的最小值
     */
    public static int[] minArray1(int[][] arr) {
        int[] res = new int[arr.length];
        for (int i=0;i<res.length;i++){
            int[] s = arr[i];
            Arrays.sort(s);
            res[i] = s[0];
        }
        return res;
    }

    /**
     * 求"1!+4!(2的平方)+9!(3的平方)+...+n的值
     */
    public static int calculate(int n) {
        if(n==1){
            return 1;
        }else{
            return (int)(calculate(n-1)+ Math.pow(n,2));
        }
    }

    /**
     * 数组对角线之和
     */
    public static int arraySum(int[][] arr) {
        int sum = 0;
        StringBuffer sb1 = new StringBuffer();
        StringBuffer sb2 = new StringBuffer();
        for (int i=0;i<arr.length;i++){
            sum+=arr[i][i];//左上到右下
            sb1.append(arr[i][i]);
            sum+=arr[i][arr.length-1-i];//右上到左下
            sb2.append(arr[i][arr.length-1-i]);
            if(arr.length-1-i == i){ //去掉重复点
                sum -= arr[i][i];
                System.out.println("去掉重复点:"+i+","+i);
            }
        }
        System.out.println("对角线分别为:"+sb1+"和"+sb2);
        return sum;
    }

    /**
     * 打印杨辉三角
     *
     * 原理
     * 1.每个数等于它上方两数之和
     * 2.第n行的数字有n个
     **/
    public static void yangHui(int n) {
        int[][] a = new int[n][n];

        for (int i = 0; i < n; i++) {
            //格式化输出
            System.out.format("%" + (n - i) * 2 + "s", "");
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i) {
                    a[i][j] = 1;
                } else {
                    a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
                }

                System.out.format("%4d", a[i][j]);
            }

            System.out.println();
        }
    }

    /**
     * 猴子吃桃问题
     * @param x 天数
     */
    public static int monkeyQue(int x) {

        if (x <= 0) {
            return 0;

        } else if (x == 1) {
            return 1;

        } else {
            return 2 * monkeyQue(x - 1) + 2;
        }

    }

    /**
     * 输入一段字符,计算出里面单词的个数
     *
     * @param str 一段文字
     */
    public static int countWord(String str) {
        String[] arr = str.split(" ");
        return arr.length;
    }

    /**
     * 给定两个字符串s和t,判断这两个字符串中的字母是不是完全一样(顺序可以不一样)
     */
    public static void isAnagram(String s,String t) {
        s = stringSort(s);
        t = stringSort(t);
        if(s.equals(t)){
            System.out.println("相同");
        }else{
            System.out.println("不相同");
        }
    }

    /**
     * 把字符串转为数组排序后字符串输出
     * @param str
     * @return
     */
    public static String stringSort(String str){
        char[] arr = str.toCharArray();
        Arrays.sort(arr);
        str = String.copyValueOf(arr);
        System.out.println("排序后:"+str);
        return str;
    }

    /**
     * 判断是否是2的某次方
     */
    public static void isPowerOfTwo(int num) {
        if (num <= 0) {
            System.out.println("不是");
        }else{
            while (num % 2 == 0) {
                num = num / 2;
            }

            if (num == 1) {
                System.out.println("是");
            } else {
                System.out.println("不是");

            }
        }
    }

    /**
     * 判断一个数字是不是ugly number(分解出来的质因数只有2、3、5这3个数字)
     * @param num
     */
    public static void isUgly(int num) {
        if (num <= 0) {
            System.out.println("不是");
        } else {
            while (num % 2 == 0) {
                num = num / 2;
            }
            while (num % 3 == 0) {
                num = num / 3;
            }
            while (num % 5 == 0) {
                num = num / 5;
            }
            if (num == 1) {
                System.out.println("是");

            } else {
                System.out.println("是");

            }
        }
    }

    public static void main(String[] args) {
        System.out.println("3的阶乘之和:"+Factorial(3));

        int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
        System.out.println("求出二维数组每列的最小值:"+Arrays.toString(minArray(arr)));
        System.out.println("求出二维数组每列的最小值:"+Arrays.toString(minArray1(arr)));
        System.out.println("求1!+4!(2的平方)+9!(3的平方)的值:"+calculate(3));
        System.out.println("数组对角线之和-----");
        System.out.println("数组对角线之和:"+arraySum(arr));
        System.out.println("打印杨辉三角------------- ");
        yangHui(10);
        System.out.println("猴子吃桃问题:"+monkeyQue(10));
        String str = "hello world";
        System.out.println("单词的个数:"+countWord(str));
        System.out.println("判断这两个字符串中的字母是不是完全一样-----");
        isAnagram("acbd","abdc");
        System.out.println("判断是否是2的某次方-----");
        isPowerOfTwo(8);
        System.out.println("判断一个数字是不是ugly number-----");
        isUgly(15);
    }
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值