海阔天空

当前时间为:
欢迎大家来到海阔天空https://www.9713job.com,广告合作以及淘宝商家推广请微信联系15357240395

2020java教程:javaSE基础综合习题

未分类
2020-09-21 08:49:31
1822677238@qq.com

手机扫码查看

2020java教程:javaSE基础综合习题

javaSE基础综合习题

1.(循环)输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)

import java.util.Scanner;

public class demos{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入整数");
        int n=sc.nextInt();
        int sum=0;
        for(int i=0;i<n;i++){
            sum+=n%10;
            n=n/10;
        }
        System.out.println(sum);
    }
}

2.(循环)计算圆周率
中国古代数学家研究出了计算圆周率最简单的办法:
PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17
这个算式的结果会无限接近于圆周率的值,我国古代数学家祖冲之计算出,圆周率在 3.1415926 和
3.1415927 之间,请编程计算,要想得到这样的结果,他要经过多少次加减法运算?

public class demos{
    public static void main(String[] args) {
        double pi=0;//累加pi的值
        double a=1;//分母
        int b=1;//计算是加还是减
        int i=0;//计数器
        while (pi < 3.1415926 || pi > 3.1415927) {
            /*
            pi=4/1-4/3+4/5-4....
             */
            pi+=b*4/a;//pi=0+1*4/1(pi=4/1)   pi=4+-1*4/3(pi=4+-4/3)
            i++;//i=1 i=2
            b*=-1;//b=1*-1(-1)  b=-1*-1(1)
            a+=2;//a=a+2(a=3.0) a=3.0+2(5)
        }
        System.out.println(i);
    }
}

3.(数组)筛选法求质数
输入一个整数n,求小于这个整数的所有质数。
算法:定义一个长度为n的布尔数组,true为质数,false为不是质数。
初始均为true,之后从2开始循环:
1.找到第一个为true的下标i
2.把所有下标i的倍数的值重置为false
3.直到扫描完数组中的所有数值。
4.最后遍历数组,如果下标i的值为true,则说明 i为质数

import java.util.Scanner;

public class demos{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入整数");
        int n=sc.nextInt();
        boolean[] b=new boolean[n+1];//初始化数组
        //数组初始值均为true
        for(int i=0;i<b.length;i++){
            b[i]=true;
        }
        //从2开始循环
        for(int i=2;i<b.length;i++){
            if(b[i]){//如果布尔数组存有true
                //将i的倍数所有值重置为false
                for(int j=i*2;j<b.length;j+=i){
                    b[j]=false;
                }
            }else continue;//否则跳过
        }
        //循环遍历打印数组
        for(int i=2;i<b.length;i++){
            if(b[i]){
                System.out.print(i+"\t");
            }
        }
        System.out.println();
    }
}

4.(数组)十五个猴子围成一圈选大王,依次 1-7 循环报数,报到 7 的猴子被淘汰,直到最后一只猴子成
为大王。问,哪只猴子最后能成为大王?

public class demos{
    public static void main(String[] args) {
        int size=15;
        //true淘汰 false没淘汰
        boolean[] b=new boolean[15];
        int num=1;
        int index=0;
        while (size > 1) {
            if(!b[index]){
                num++;
                if(num==8){
                    b[index]=true;
                    num=1;
                    size--;
                }
            }
            index++;
            if (index == 15) {
                index=0;
            }
        }
        for(int i=0;i<b.length;i++){
            if(!b[i]){
                System.out.println(i+1);
            }
        }
    }
}

5.(数组)八皇后问题
在 8×8 的国际象棋盘上,放置八个皇后,使任何一个皇后都不能吃掉另一个。国 际象棋规则中,皇后
可以吃到任何一个与他在同一行、同一列或者同一斜线上的敌方棋子,所以八皇后问题的所有解满足。8
个皇后都不在同一行、同一列,或者同一斜线上。
输出所有的解。
提示:使用递归。

public class EightQueen {
   
   static int[] queens = new int[8]; //表示每一行皇后的纵坐标
   static int solveNum = 1; //统计解的数量
   public static void main(String[] args) {
      put(0);
   }
   
   //判断在之前的基础上在第n行放第m列是否可行
   public static boolean canPut(int n, int m){
      //判断是否有在同一列的
      for(int i = 0; i<n; i++){
         if (queens[i] == m) return false;
      }
      //判断是否有在左上-->右下对角线
      for(int i = 0; i<n; i++){
         if (queens[i] - i == m - n) return false;
      }
      
      //判断是否有在右上-->左下对角线
      for(int i = 0; i<n; i++){
         if (queens[i] + i == m + n) return false;
      }
      return true;
   }
   
   //表示尝试放置第n行的皇后
   public static void put(int n){
      if (n == 8){
         System.out.println(solveNum++);
         printQueen();
         return;
      }
      for(int i = 0; i<queens.length; i++){
         if (canPut(n, i)){
            queens[n] = i;
            put(n+1);
            queens[n] = 0;
         }
      }
   }
   public static void printQueen(){
      for(int i = 0; i<queens.length; i++){
         for(int j = 0; j<queens.length; j++){
            if (queens[i] == j){
               System.out.print("*");
            }else{
               System.out.print(" ");
            }
         }
         System.out.println();
      }
   }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注