第三章题目

import java.util.*;

import java.lang.Math;

public class home1{

    public static void main(String [] args){

        double a,b,c,r1,r2,i;

        Scanner input=new Scanner(System.in);

        System.out.println("请输入a,b,c的值:");

        a=input.nextDouble();

        b=input.nextDouble();

        c=input.nextDouble();

        i=b*b-4*a*c;

        if(i>0){

            r1=(((-b)+Math.sqrt(i))/(2*a));

            r2=(((-b)-Math.sqrt(i))/(2*a));

            System.out.println("根1的值为:"+r1+"根2的值为:"+r2);

            //System.out.println("请重新输入a,b,c的值:");

        }else if(i==0){

            r1=(((-b)+Math.sqrt(i))/(2*a));

            System.out.println("根1和根2的值一样为:"+r1);

        }else{

            System.out.println("因为i<0所以次方程没有实根。。");

        }

        //System.out.println("a");

    }

}

题目分析:分析这道题目的关键是判别式(delt=b*b-4*a*c)的取值决定,如果delt>0则有两个不一样的值;若delt=0,有两个一样的值,若delt<0则方程无解  

 

import java.lang.Math;

import java.util.Scanner;

/*

数据:a,b,c,d,e ,f;

步骤:1.如果ad-bc的值为0,提示用户重新输入值

2.输入值正确的话,直接计算x和y的值

 */

public class home2{

    public static void main (String [] args){

        double  a,b,c,d,e,f,x,y;

        System.out.print("请输入题目中的几个值:");

        Scanner input=new Scanner(System.in);

        a=input.nextDouble();

        b=input.nextDouble();

        c=input.nextDouble();

        d=input.nextDouble();

        e=input.nextDouble();

        f=input.nextDouble();

        if((a*d-b*c)==0){

            System.out.println("The equation has no solution");

        }else{

            x=(e*d-b*f)/(a*d-b*c);

            y=(a*f-e*c)/(a*d-b*c);

            System.out.println("x  is  :"+x+" and " +" y  is: "+y);

        }

    }

}

 3.

import java.util.Scanner;
class Demo03_03{
    public static void main(String[] args){
        //1.
        Scanner scanner=new Scanner(System.in);
        System.out.print("今天是周几:");
        int today=scanner.nextInt();
        //2.
        System.out.print("未来的几天:");
        int future=scanner.nextInt();
        //3.
        int futureDay=(today+future)%7;

        String todayStr="";
        String futureDayStr="";
        
        if(today==0){
            todayStr="周日";
        }else if(today==1){
            todayStr="周一";
        }else if(today==2){
            todayStr="周二";
        }else if(today==3){
            todayStr="周三";
        }else if(today==4){
            todayStr="周四";
        }else if(today==5){
            todayStr="周五";
        }else if(today==6){
            todayStr="周六";
        }

        if(futureDay==0){
            futureDayStr="周日";
        }else if(futureDay==1){
            futureDayStr="周一";
        }else if(futureDay==2){
            futureDayStr="周二";
        }else if(futureDay==3){
            futureDayStr="周三";
        }else if(futureDay==4){
            futureDayStr="周四";
        }else if(futureDay==5){
            futureDayStr="周五";
        }else if(futureDay==6){
            futureDayStr="周六";
        }
        System.out.println("今天是"+todayStr+",未来的日子是"+futureDayStr);
    }
}

import java.util.Scanner;
public class home4{
    public static void main(String [] args){
        System.out.print("请输入一个数字:");
        Scanner scanner = new Scanner(System.in);
        int number1= scanner.nextInt();
        int number2;
        number2=number1;
        //2.
        int a=number2%10;    //得到的是个位
        number2=number2/=10;
        int b=number2%10;    //得到的是十位
        number2=number2/10;
        int c=number2%10;    //得到的是百位  
        if(number1==(a*100+b*10+c)){
            System.out.println(number1+"是一个回文数");
        }else{
            System.out.println(number1+"不是一个回文数!");

        }
        //这个程序的局限性就在于他只能判断3位数是不是回文数
    }

}

 

题目分析:回文数就是不管从前往后还是从后往前数字都是一样的,我们可以把这个数字先%(取余)将各位数找出来,然后再将这个数/10,就可得到除各位以外的其他数字......这样依次运算,就可以将这个数的每位数找出来,然后进行反序拼接,看得到的新数是否与原来的数字相等,若相等,则是回文数,否则,则不是回文数。

下面我们以12345

12345                                                               54321
12345%10=5 12345/10=1234                     5*10000+4*1000+3*100+2*10+1
1234%10=4  1234/10=123                           (5*1000+4*100+3*10+2)*10+1
123%10=3   123/10=12                                 ((5*100+4*10+3)*10+2)*10+1
12%10=2    12/10=1                                       (((5*10+4)*10+3)*10+2)*10+1
1%10=1     1/10=0                                           ((((0*10+5)*10+4)*10+3)*10+2)*10+1

由上面54321的排列我们可以找到以下规律:

sum=0
sum=sum*10+5;   //5
sum=sum*10+4;   //54
sum=sum*10+3;   //543
sum=sum*10+2;   //5432
sum=sum*10+1;   //54321

import java.util.*;
class home7{
    public static void main(String [] args){
        int num1,num2,use1,use2;
        Scanner input=new Scanner(System.in);
        Random ran=new Random();
         int b=ran.nextInt(30);
         System.out.println(b);
        System.out.print("请输入一个两位数:");
        int use=input.nextInt();
       
        num1=b%10;
        b=b/10;
        num2=b/10;

        use1=use%10;
        use=use/10;
        use2=use/10;
        if (use==b){
            System.out.println("恭喜获得10000元!");
        }else if(use1==num1||use1==num2||use2==num2||use2==num1){
            //use1==num1||use1==num2||use2==num2||use2==num1
            //use1==num2&&use2==num1
            System.out.println("1000");
        }else if(use1==num2&&use2==num1){
            //(use1==num2&&use1!=num1)||(use2==num1&&use2!=num2)
            System.out.println("3000");

        }



    }
}

import java.util.*;
class Demo03_06{
    public static void main(String[] args){
        //1.
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入 剪刀0 石头1 布2:");
        int usr=scanner.nextInt();
        //2.
        Random random=new Random();
        int com=random.nextInt(3);

        String usrStr="";
        String comStr="";
        switch(usr){
            case 0: //if usr==0
                usrStr="剪刀"; 
                break;
            case 1:// if usr==1
                usrStr="石头";
                break;
            case 2:// if usr==2
                usrStr="布";
                break;
        }
        switch(com){
            case 0: 
                comStr="剪刀"; 
                break;
            case 1:
                comStr="石头";
                break;
            case 2:
                comStr="布";
                break;
        }
        //3.
        if(usr==com){
            System.out.printf("用户是%s,电脑是%s,平局",usrStr,comStr);
        }else if(usr==0&&com==2 || usr==1&&com==0 || usr==2&&com==1){
            System.out.printf("用户是%s,电脑是%s,用户赢",usrStr,comStr);
        }else{
            System.out.printf("用户是%s,电脑是%s,用户输",usrStr,comStr);
        }
    }
}

import java.util.*;
class demo7{
    public static void main(String[] args){
     Scanner s=new Scanner(System.in);
     System.out.print("请输入日期");
     int y=s.nextInt();
     int m=s.nextInt();
     int q=s.nextInt();
     int h;
     h=(q+26*(m+1)/10+y%100+(y%100)/4+(y/100)/4+5*(y/100))%7;
           switch(h){
               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;
           }
    }
}

import java.util.Scanner;
class Demo03_08{
    public static void main(String[] args){
        //1.
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入坐标点:");
        double x=scanner.nextDouble();
        double y=scanner.nextDouble();
        //2.
        double xo=0;
        double yo=0;
        double radius=10;
        double distance=Math.sqrt(Math.pow(x-xo,2)+Math.pow(y-yo,2));
        //3.
        if(distance>radius){
            System.out.println("点在圆外");
        }else if(distance==radius){
            System.out.println("点在圆上");
        }else{
            System.out.println("点在圆内");
        }
    }
}

import java.util.Scanner;
class Home03_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){
            System.out.println("点再三角形内");
        }else{
            System.out.println("点再三角形外");
        }
    }
}

做此类习题思路先是把极限的点先判端出来,也就是各种临界情况。然后再根据题目的具体的要求在结合流程控制语句。就可以解答此类题目了

import java.util.Scanner;
class Home310{
    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("小矩形和大矩形相交!");
        }
    }
}

此类型题目和上一题题目类型大致相同,它先是分析出小矩形在大矩形内部活动的极限范围的最大取值范围和最小取值范围,由此可以求出小矩形中心坐标只要在内部情况的允许范围内,他就在和大矩形内部。

外部的情况和上面一样。除此之外就是与大矩形相离的情况了。

11.

import java.util.Scanner;
class Home11{
    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){//  因为循环步长不确定,所以使用while循环
            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)); 
        }
    }
}

输入一个数字再判断数字是否为0,如果为0则退出,不是则继续。在while循环中先把输入一串数字拿进来,然后一个一个判断。根据流程当输出为0,直接跳出循环结束流程。

不为0,根据定义的变量就可以统计出来正数的个数,负数的个数,然后再进行求和和平均值的运算,最后在输出结果。

import java.util.Scanner;
class Home12{
    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);

    }
}

import java.util.Scanner;
class home13{
    public static void main(String [] args){
        System.out.print("请输入一个整数:");
        Scanner input =new Scanner(System.in);
        int n=input.nextInt();
        while(true){
            for(int i=2;i<=n;i++){
                if(n%i==0){
                    System.out.print(" "+i);
                    n=n/i;
                    break;
                }
                
            }
            if(n==1){
                    break;
                }
        }
    }
}

求某一个数的最小因子都是先从2开始,然后范围就是2~num/2;

有了这个思路就可以一直循环这个步骤了,当然因为输入的数字的值是不确定的所以循环首先while,在它的内部再使用for循环,当整除变量i=0之后直接退出程序,然后在输出这个程序的值,因为是从2开始的所以不用担心它的顺序大小问题。

 

import java.util.Scanner;
class home14{
    public static void main(String [] args){
        System.out.print("请输入行数:");
        Scanner input =new Scanner(System.in);
        int line=input.nextInt();
        for(int i=1;i<=line;i++){
            for(int k=1;k<=line-i;k++){
               if(line<10){
                    System.out.print("  ");
                }else{
                    System.out.print("   ");
                }
            }
            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个for循环,第一个for循环是整体大的循环,第2个for循环和第3个for循环都在第一个循环的内部嵌套着。

第一个for循环代表打印行数,比如打印4行,总行数是4行,他负责从第1行打印到第四行。

第2个for循环代表第i行该多少空格数。也是从第一行开始打印然后打印到最后一行。

第3个for循环代表每行打印的数字个数,以及数字的值。

class home5{
    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();
        }
            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();
        }
          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();
        }
         System.out.println("--------------");


         for(int i=1;i<=6;i++){
             for(int k=1;k<i;k++){//k<=i-1也符合条件
                 System.out.print("  ");
             }
             for(int j=1;j<=7-i;j++){
                 System.out.print(j+" ");
             }
             System.out.println();
         }



    }
}

class Home17{
    public static void main(String[] args){
        int count=0;  //当前素数的个数
        boolean flag=true;
        for(int num=2;num<=1000;num++){
            for(int m=2;m<=num-1;m++){
                if(num%m==0){
                    flag=false;
                    break;
                }
            }
            if(flag){
                count++;
                System.out.print(num+" ");
                if(count%8==0){ //8 16 24 32
                    System.out.println();
                }
            }
            flag=true;
        }
    }
}

 

什么是素数 就是除了1和其本身之外 没有其他的数字可以整除的

num

2 ~ m ~ num-1 找到一个数字 如果这个数字m num%m==0 num不是素数

如果一个都没有找到的话 这个数字是素数

首先先用一个boolean类型的flag作为标记,假设开始输入的就为素数,当flag=flase时用break跳出循环,当循环是for进行完毕的话则说明是素数,如果是break出来的则不是素数

class home21{
    public static void main(String[] args){
       
        int sum=0;
        for(int n=2;n<=10000;n++){   
            for(int i=1;i<=n/2;i++){
                if(n%i==0){
                    sum+=i;
                }
            }
            if(n==sum){
                System.out.println("完全数"+n);
            }
            sum=0;
        }
    }
}

求所谓的完全数就是求解一个数的所有因子,只要它的所有因子加在一起等于这个数的本身的话,这个数就是所谓的完全数。

同样这里先求出一个数的完全数,这样可以发散出去,求区间范围完全数,其实也就是再加for循环进行求解就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值