一些基本算法

最基本的字符串

获取字符串中的所有数字

//得到所有的数字
    public static void main(String[] args) {
        String str="123ads234fasdf123";
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
        	//注意chars[i]比较的是ASCII码值
            if(chars[i]>=48 && chars[i]<=57){
                System.out.print(chars[i]+",");
                //控制台打印结果:1,2,3,2,3,4,1,2,3,
            }
        }
    }

水仙花数

水仙花数:三个数的立方和等于这个数,例如:153=1的三次方+5的三次方+3的三次方

//打印100-999之间所有的水仙花数
    public static void main(String[] args) {
        for (int i = 100; i < 1000; i++) {
            int ge=i%10;//个位数
            int shi=i/10%10;//十位数
            int bai=i/100%10;//百位数
            if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
                System.out.println(i);//153-370-371-407
            }
        }
    }

分解质因数

 @Test
    //对一个正整数进行分解质因数:输入90,打印出90=2*3*3*5
    public void test1(){
        String str="";
        //显示一个输入框
        str=javax.swing.JOptionPane.showInputDialog("请输入n的值(输入exit退出):");
        int n=0;
        try {
           n= Integer.parseInt(str);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.print(n+"分解质因数"+n+"=");
        fenjie(n);
    }
    private void fenjie(int n) {
        for (int i = 2; i < n/2; i++) {
             if(n%i==0){
                 System.out.print(i+"*");
                 fenjie(n/i);
             }
        }
        System.out.print(n);
        System.exit(0);//结束程序
     }

反弹

 //100米每次反弹原高度的一半,求它在 第10次落地时,共经过多少米?第10次反弹多高
    @Test
    public void test02(){
        double a=100;
        double b=0;
        for (int i = 0; i < 10; i++) {
             a/=2;
            System.out.println(a);
        }
    }

循环

//1,2,3,4可以组成多少个(个十百都不同)的3位数?
    @Test
    public void test03(){
        int[] arr={1,2,3,4};
        int count=0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                for (int k = 0; k < arr.length; k++) {
                    if(arr[i]!=arr[j]&&arr[i]!=arr[k]&&arr[j]!=arr[k]){
                        System.out.println(arr[i]+""+arr[j]+""+arr[k]);
                        count++;
                    }
                }
            }
        }
        System.out.println("可以组成"+count+"个(个十百都不同)的3位数");
    }

乘法口诀

@Test
    public void test05(){
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i+"*"+j+"="+i*j+"  ");
            }
            System.out.println();
        }
    }

吃桃子

 //每天吃一半加1个桃子,第十天剩下1个桃子,总共有多少桃子
    public void test06(){
        int a=1;
        for (int i = 1; i < 10; i++) {
             a=(a+1)*2;
            System.out.println(a);
        }
        System.out.println("共有"+a+"个桃子");//1534

    }

回文数

//回文数12321个位数和万位数相同,十位数和千位数相同;打印5位数所有的回文数
    @Test
    public void huiwen(){
        int count=0;
        for (int i = 10000; i < 100000; i++) {
             int ge =i%10;
             int shi=i/10%10;
             int qian=i/1000%10;
             int wan=i/10000%10;
             if(ge==wan&&shi==qian){
                 count++;
                 System.out.println("5位数中的回文数:"+i);
             }
        }
        System.out.println("总共有"+count+"个");
    }

约瑟夫环

//约瑟夫环(30人围成一个圈,从某一个人开始数,第9个人死亡,从下一个人开始数,第9个人死亡,死亡后人数减少,依次循环,最后剩下15个基督教人,这些基督教人的位置?)

 @Test
    public void test07(){
    	//定义30个活人
        boolean[] person=new boolean[30];
        for (int i = 0; i < person.length; i++) {
            person[i]=true;
        }
        
        int counter=0;//死亡人数
        int index=0;
        int claimNumber=0;//当前是第几个人的
        //条件:15个人死亡
      while (counter<15){
        if(person[index]){
            claimNumber++;
            if(claimNumber==9){
                person[index]=false;
                counter++;
                claimNumber=0;
            }
        }
            index++;
            if(index>=person.length){
                index=0;
            }
      }
        for (boolean b : person) {
            if(b){
                System.out.println("基");
            }else{
                System.out.println("非");
            }
        }
        System.out.println(Arrays.toString(person));
    }

台阶

我是不懂

 //一个有n级的台阶,一次可以走1级、2级或3级,问走完n级台阶有多少种走法
    @Test
    public void test08(){
    //假设有5个台阶
        System.out.println(countWay(5));//13种方式
    }
    private int countWay(int n) {
        if(n<0){
            return 0;
        }else if(n==0){
            return 1;
        }else{
            return countWay(n-1)+countWay(n-2)+countWay(n-3);
        }
    }

拼钱

  @Test
    //50块钱用1,2,5块,可以有多少种拼的方式
    public void test09(){
        int count =0;
        for (int i = 0; i < 50/1; i++) {
            for (int j = 0; j < 50/2; j++) {
                for (int k = 0; k < 50/5; k++) {
                    if(i*1+j*2+k*5==50){
                        System.out.println(i+"个一块的"+j+"个2块的"+k+"个5块的");
                        count++;
                    }
                }
            }
        }
        System.out.println("总共有"+count+"种方法拼成50块");
    }

猜你喜欢

转载自blog.csdn.net/qq_43338182/article/details/83004934