趣味问题

1.打印一颗小树图案

package javayouquqenti;
//打印一颗小树图像
public class XioaShu {
    public static void main(String[] args) {
        for(int i=1;i<=9;i++){
            if(i<=5){//打印出一个三角形,5层,作为小树的枝叶部分
                for(int k=i;k<=4;k++){
                    System.out.print(" ");//第i行对应4-i个空格
                }
                for(int j=1;j<=2*i-1;j++){
                    System.out.print("*");//第一行打印2*i-1个*
                }
            }
            else{//5行以后是小树的主干部分
                for(int k=1;k<=3;k++){
                    System.out.print(" ");
                }
                for(int j=1;j<=3;j++){
                    System.out.print("*");
                }
            }
            System.out.println();
        }
    }

}

趣味问题_第1张图片

2.输出1000以内的水仙花数

水仙花数, 如果一个三位数=百位数的立方+十位数的立方+个位数的立方,那么这个数就是水仙花数

package javayouquqenti;
//水仙花
public class shuixianhuashu {
public static void main(String[] args) {
       for(int i=100;i<=999;i++){//保证是三位数且在1000以内
           int shui=(i/100)*(i/100)*(i/100);//百位数的立方
           int xian=((i%100)/10)*((i%100)/10)*((i%100)/10);//十位数的立方
           int hua=((i%100)%10)*((i%100)%10)*((i%100)%10);//个位数的立方
           if(shui+xian+hua==i){
               System.out.println(i);
           }
       }
    }

}

这里写图片描述

3.百马百担问题

有一百匹马驼一百担货物,大马一次驼三担,中马驼两担,两匹小马驼一担,问共有大、中、小马多少匹?

package javayouquqenti;
//百马百担问题
public class BaiMaBaiDan {

    public static void main(String[] args) {
        for(int i=0;i<=100;i++){//代表大马的匹数
            for(int j=0;j<=100;j++){//代表中马马的匹数
                int dama=3*i;//代表大马的驼的货物担数
                int zhonma=2*j;//代表中马的驼的货物担数
                int xiaoma=(100-i-j)/2;//代表小马的驼的货物担数
                if(dama+zhonma+xiaoma==100){
                    System.out.print("大马的匹数"+i+",");
                    System.out.print("中马的匹数"+j+",");
                    System.out.println("小马的匹数"+(100-i-j));
                }
            }
        }
    }

}

趣味问题_第2张图片

4.斐波那契数列

1,1,2,3,5,8,13…… 即每一个数等于前面两数之和的序列

package java练习;
import java.util.Arrays;

//斐波那契,Arrays.copyOf拷贝数组
public class FeiBoNaQie {
    public static void fbnq(int[] array){
        array[0]=1;
        array[1]=1;
        array[2]=2;
        for(int i=2;i<=array.length-1;i++){
            array[i]=array[i-1]+array[i-2];
        }
    }
    public static void main(String[] args) {

       int[] array=new int[4];//求第四个数
       fbnq(array);
       System.out.println(Arrays.toString(array));  
    }
}

这里写图片描述

5.汉诺塔

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

此问题满足递归算法的条件,可以用递归算法来算,假设三个柱子分别时A,B,C,我们知道,当只有一个圆盘时,只需将圆盘从第一个柱子移到第三个柱子即可,只需要移动一次,而当有两个圆盘时,我们需要三次,先将A上那个小的从A移到B,再将A上那个大的从A移到C,然后将已经移到B上那个小的从B移到C,共三步
趣味问题_第3张图片
所以当有n个盘子时,可以将n个盘子理解为只有第n个和剩下的n-1个两部分(即把n-1看做一部分,把单个n看做一部分),那么,也需要三步,先将A上那个小的(n-1)从A移到B,再将A上那个大(n)的从A移到C,然后将已经移到B上那个小的(n-1)从B移到C,也是三步,
趣味问题_第4张图片

package study;
//汉诺塔
public class HanNuoTa {
     public static void han(char pos1,char pos3){

         System.out.println(pos1+"--->"+pos3);
     }
     public static void nuo(int n,char pos1,char pos2,char pos3){

         if(n==1){
             han(pos1,pos3);
         }
         else{
             nuo(n-1,pos1,pos3,pos2);/*把n个盘子看做两个整体部分,把n-1个盘看作一个整体,从塔1移到塔2;
             把最大的那个盘n盘看作一个整体,从塔1移到塔3;
             */
             han(pos1,pos3);
             nuo(n-1,pos2,pos3,pos1);//把n-1看做一个整体从塔2移到塔3;
         }
     }
public static void main(String[] args) {
          nuo(3,'A','B','C');
    }

}

趣味问题_第5张图片

你可能感兴趣的:(java常见问题)