JAVA第三章习题代码之总结

JAVA第三章习题代码之总结

3.7

分析:

1.数据:某一天 h,月份m,年year.

 2.步骤:1.提示用户输入年月和该月的哪一天。

              2.带入公式计算h。

              3.输出它是一周中的星期几。

import java.util.Scanner;
class Demo3_7{
    public static  void main(String[]args){
        Scanner scanner=new  Scanner(System.in);
        //1.先输入年份
        System.out.print("请输入年份:");
        int year=scanner.nextInt();
        
        //2.输入月份 1月 2月分别用13 14代替 同时year-1
        System.out.print("请输入月份:");
        int month=scanner.nextInt();
        
        //3.输入日期
        System.out.print("请输入日期:");
        int day=scanner.nextInt();
        
        //4.对特殊的1月和2月做处理
        if(month==1||month==2){ //如果month为1或者2,则给month的值加12,给year的值减1.
            month+=12;
            year-=1;
        }
        //5.套公式
        int h=(day+26*(month+1)/10+year%100+year%100/4+year/100/4+5*year/100)%7;//计算天
        
        switch(h){                          //用switch-case来实现数字具体指的是星期几。
            case 0:
                System.out.println("是周六");
                break;
            case 1:
                System.out.println("是周日");
                break;
            case 2:
                System.out.println("是周一");
                break;
            case 3:
                System.out.println("是周二");
                break;
            case 4:
                System.out.println("是周三");
                break;
            case 5:
                System.out.println("是周四");
                break;
            case 6:
                System.out.println("是周五");
                break;
        }
    }
}


注意:对一月和二月的特殊处理。

3.9

分析:

1.数据:两点的坐标

2.步骤:1.提示用户输入一个点的x坐标和y坐标

              2.先大致判断一下坐标的范围
              3.再精确的判断坐标的范围

import java.util.Scanner;
class Demo03_09{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        //1.提示用户输入一个点的坐标
        System.out.print("请输入一个坐标:");
        double x=scanner.nextDouble();
        double y=scanner.nextDouble();
        
        //2.先大致判断一下坐标的范围
        //3.再精确的判断坐标的范围
        if(x>=0&&x<=200&&y<=-0.5*x+100){       //x范围[0,200]
            System.out.println("点再三角形内"); //若y<=-0.5*x+100,点就在三角形内。
        }else{
            System.out.println("点再三角形外");
        }
    }
}

注意:主要求出斜边的表达式。

3.10

分析:

1.数据:坐标(x2,y2),坐标(x1,y1),h1,w1,h2,w2.

2.步骤:1.提示用户输入两个矩形中点的坐标以及每个的高和宽.

               2.如图:求出小矩形在大矩形里面时小x2,y2的范围,以及在外面,相交时的范围。

              

import java.util.Scanner;
class Demo03_10{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        //1.先输入大矩形的中心,宽和高
        System.out.print("请输入第1个矩形的信息:");
        double x1=scanner.nextDouble();
        double y1=scanner.nextDouble();
        double w1=scanner.nextDouble();
        double h1=scanner.nextDouble();
        //2.再输入小矩形的中心,宽和高
        System.out.print("请输入第2个矩形的信息:");
        double x2=scanner.nextDouble();
        double y2=scanner.nextDouble();
        double w2=scanner.nextDouble();
        double h2=scanner.nextDouble();

        double inXMin=x1-(w1-w2)/2;//在里面时的条件
        double inXMax=x1+(w1-w2)/2;
        double inYMin=y1-(h1-h2)/2;
        double inYMax=y1+(h1-h2)/2;

        double outXMin=x1-(w1+w2)/2;//在外面时的条件
        double outXMax=x1+(w1+w2)/2;
        double outYMin=y1-(h1+h2)/2;
        double outYMax=y1+(h1+h2)/2;
        if(x2>=inXMin&&x2<=inXMax&&y2>=inYMin&&y2<=inYMax){
            System.out.println("小矩形在大矩形里面!");
        }else if(x2<=outXMin||x2>=outXMax||y2<=outYMin||y2>=outYMax){
            System.out.println("小矩形在大矩形外面!");
        }else{
            System.out.println("小矩形和大矩形相交!");
        }
    }
}

注意:用极限的思想做。

3.11

分析:

步骤:1.请输入我指定个数的整数。

           2.判断正数和负数分别为多少个。

           3.求和,求平均值。

           4.输出。

import java.util.Scanner;

class Demo03_11{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        double sum=0;  //总和
        int positives=0;    //正数的个数
        int negatives=0;    //负数的个数
        System.out.print("请输入若干数字:");
        while(true){               //先都让数据进来。
            int num=scanner.nextInt();
            if(num!=0){
                sum+=num;
                if(num>0){          //整数个数的实现
                    positives++;
                }else{
                    negatives++;
                }
            }else{
                break;  //跳出当前循环,不然的话会死循环
            }
        }   
        if(positives+negatives==0){
            System.out.println("没有其他数字的输入,除了0");
        }else{
            System.out.println("正数的个数"+positives);
            System.out.println("负数的个数"+negatives);
            System.out.println("总和"+sum);
            System.out.println("平均值"+sum/(positives+negatives)); 
        }
    }
}

注意:未指定的个数,就要考虑while循环。指定的个数用for 循环。

3.12

import java.util.Scanner;
class Demo03_12{
   
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        //1.输入两个数字
        System.out.print("请输入两个数字:");
        int n1=scanner.nextInt();
        int n2=scanner.nextInt();
        int gcd=1;
        for(int i=n1<n2?n1:n2;i>=1;i--){//用三目运算符从最小数判断
            if(n1%i==0&&n2%i==0){
                gcd=i;
                break;
            }
        }
        System.out.println(gcd);

    }
}

注意:break是结束for 循环的。

3.13

分析:

步骤:1.输入一个整数。

           2.求最小因子。

           3.按升序输出。(例:
120  2~120 ->2
60   2~60  ->2
30   2~30  ->2
15   2~15  ->3
5    2~5   ->5
1   
 )

import java.util.Scanner;
class Demo03_13{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int num=scanner.nextInt();
        while(true){
            for(int i=2;i<=num;i++){              //15%2取余不等于0,然后i++为3,再运行15%3
                if(num%i==0){                     //==0,然后输出3
                    System.out.print(i+" ");
                    num=num/i;
                    break;
                }
            }
            if(num==1){
                break;
            }
        }
    }
}

注意:第一个break结束for循环。

3.14

分析:

拿出第四行找出规律:

4  3  2  1 2 3 4     //值 y
-3 -1 -2  0 1 2 3   //坐标 x
第4行 x∈[-3,3] y=|x|+1
第5行 x∈[-4,4] y=|x|+1

import java.util.Scanner;
class Demo03_14{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入行数:");
        int line=scanner.nextInt();
        for(int i=1;i<=line;i++){
            for(int k=1;k<=(line-i);k++){//输出空格
                if(line<10){
                    System.out.print("  ");//当行数小于10行时输出两个空格
                }else{
                    System.out.print("   ");//当行数大于10行时输出三个空格
                }
            }
            for(int x=-(i-1);x<=i-1;x++){//打印数字
                if(line<10){
                    System.out.printf("%-2d",Math.abs(x)+1);
                }else{
                    System.out.printf("%-3d",Math.abs(x)+1);
                }
            }
            System.out.println();
        }
    }
}

3.15

class Demo03_15{
    public static void main(String[] args){
        //图案一
        for(int i=1;i<=6;i++){
            for(int j=1;j<=i;j++){
                System.out.print(j+" ");   
            }
            System.out.println();
        }
        //图案二

        for(int i=1;i<=6;i++){
            for(int j=1;j<=7-i;j++){
                System.out.print(j+" ");
            }
            System.out.println();
        }
       
        //图案三
        for(int i=1;i<=6;i++){
            for(int k=1;k<=6-i;k++){
                System.out.print("  ");  //先输出空格
            }
            for(int j=i;j>=1;j--){
                System.out.print(j+" ");//再输出数字
            }
            System.out.println();
        }
        //图案四

        for(int i=1;i<=6;i++){
            for(int k=1;k<=i-1;k++){
                System.out.print("  ");
            }
            for(int j=1;j<=7-i;j++){
                System.out.print(j+" ");
            }
            System.out.println();
        }
    }
}

注意:先抛开图形的形状,找出数字之间的规律,再写代码实现。

3.16

分析:

第4行  
         1  2  4 8 4 2 1
         0  1  2 3 2 1 0
      x -3 -2 -1 0 1 2 3
第5行
        1 2 4 8 16 8 4 2 1
        0 1 2 3 4  3 2 1 0
    x  -4-3-2-1 0  1 2 3 4

根据:x属于[-(i-1),i-1] ,y=i-1-|x|, 2^y ,来打印数字。

class Demo03_16{
    public static void main(String[] args){
        for(int i=1;i<=8;i++){
            for(int k=1;k<=8-i;k++){       //打印空格
                System.out.print("    ");
            }
            for(int x=-(i-1);x<=i-1;x++){   //打印数字
                System.out.printf("%4d",(int)Math.pow(2,i-1-Math.abs(x)));
            }
            System.out.println();
        }
    }
}

注意:对于打印一些对称性的三角形图案或者是类似的问题,用绝对值方便。
 

发布了6 篇原创文章 · 获赞 1 · 访问量 219

猜你喜欢

转载自blog.csdn.net/qq_45824565/article/details/104239345