Java 基础10道数学题的解法

1.题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(数字关系不清楚请自查斐波那契数列)
//费波纳列数列,前两位是1,之后没位数是前两位数的和
    private static void fibonacci(int n) {
        int temp1=1,temp2=1,temp;
        System.out.print(temp1+","+temp2);
        for (int i = 1; i <=n ; i++) {
            temp=temp1+temp2;
            System.out.print(","+temp);
            temp1=temp2;
            temp2=temp;
        }
        System.out.println();
    }
    //费波纳捏递归
    public static int fibonacci1(int month){
        if (month<0) return -1;
        if(month<3&&month>=0) return 1;
        return fibonacci1(month-1)+ fibonacci1(month-2);
    }
2.题目:判断101-200之间有多少个素数,并输出所有素数。
private static void find1() {
        outer:
        for (int i = 100; i <= 200; i++) {
            for (int j = 2; j < i; j++) {
                if (i % j == 0) continue outer;
            }
            System.out.print(i + "\t");
        }
        System.out.println();
    }

    private static void find2() {
        Boolean flag = false;
        for (int i = 100; i <= 200; i++) {
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    flag = false;//判为非质数
                    break;
                }
                //如果j循环到i都没有break,那么这个i是一个质数
                flag = true;
            }
            if (flag) System.out.print(i + "\t");
        }
    }

    //判断是否是质数
    private static boolean isPrimer(int n) {
        for (int i = 2; i < n; i++) {
            if (n % i == 0) return false;
        }
        return true;
    }
3.题目:打印出所有的"水仙花数(narcissus number)",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
    public static void narcissus() {
        int number = 0;
        for (int a = 1; a < 10; a++) {
            for (int b = 0; b < 10; b++) {
                for (int c = 0; c < 10; c++) {
                    if ((number = (a * 100 + b * 10 + c)) == (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3))) {
                        System.out.println(number);
                    }

                }
            }
        }
    }

4.题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5private static void showPrimerFactor(int n) {
      System.out.print(n + "=");
      int count = 0;
      for (int i = 1; i <= n; i++) {
            if (n % i == 0) {
               count++;
               System.out.print(((count == 1) ? "" : "*") + i);
               n = n / i;
               i=1;
               continue;
            }
      }
      System.out.println();
   }
5.题目:打印出杨辉三角形(要求打印出10行如下图)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
private static void showYangHui(int n) {
      int[][] yang = new int[n][n];
      for (int i = 0; i < n; i++) {
         for (int j = 0; j <= i; j++) {
            yang[i][j] = (j == 0 || j == i) ? 1 : yang[i - 1][j - 1] + yang[i - 1][j];
         }
      }
      for (int i = 0; i < n; i++) {
         for (int j = 0; j <= i; j++) {
            System.out.print(yang[i][j] + " ");
         }
         System.out.println();
      }
   }

6.题目:输入两个正整数mn,求其最大公约数和最小公倍数。
private static void showGCD(int x, int y) {
      int maxGY = 1;
      int minGB ;
      for (int i = 1; i < ((x > y) ? x : y); i++) {
         if (x % i == 0 && y % i == 0) {
            maxGY *= i;
            x/=i;y/=i;
            i=1;
         }
      }
      minGB=x*y*maxGY;
      System.out.println(maxGY+","+minGB);
   }

7.题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
public void findNumber(int n) {
      for (int i = 0; i < n; i++) {
         if (isSquare(i+100)&&isSquare(i+168)) System.out.println(i);
      }
   }
   private boolean isSquare(int n){
      int temp=(int)Math.pow(n, 0.5);
      return temp * temp == n;
   }

8.题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
private static void showNumbers(String info) {
      int countA = 0, countS = 0, countD = 0, countO = 0;
      int length = info.length();
      String temp;
      for (int i = 0; i < length; i++) {
         temp = info.charAt(i) + "";
         if (temp.matches("[a-zA-Z]")) {
            countA++;
         } else if (temp.matches("\\s")) {
            countS++;
         } else if (temp.matches("\\d")) {
            countD++;
         } else countO++;
      }
      System.out.println("字母" + countA + "空格" + countS + "数字" + countD + "其他" + countO);
   }
9.题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
public static void main(String[] args) {
      Scanner scanner=new Scanner(System.in);
      int n=scanner.nextInt();
      int a=2;
      System.out.println(add(a,n));
   }
   
   private static int add(int a,int n) {
      if (n==1) return a;
      return a*(int)Math.pow(10, n-1)+a*add(a, n-1);
   }
10.题目:有1234个数字,能组成多少个互不相同且无重复数字的四位数?都是多少?
public class demo {
    public static void main(String[] args) {
        int a = 1, b = 2, c = 3, d = 4, count = 0;
        for (int i = a; i <= d; i++) {
            for (int j = a; j <= d; j++) {
                for (int k = a; k <= d; k++) {
                    if (i == j || j == k || i == k) continue;
                    System.out.println(i * 100 + j * 10 + k);
                    count++;
                }
            }
        }
        System.out.println("共有:" + count + "");
    }
}

没有更多推荐了,返回首页