博文

Demo 32

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bCFh3sF5-1616595609404)(C:\Users\周润甜\AppData\Roaming\Typora\typora-user-images\image-20210324172952935.png)]

​ 本题主要解决随机数问题以及随机数与输入数字的比较问题。随机数则需要调用一个随机函数Random来实现,具体的函数格式为(其中101代表的是随机数产生的范围):

​ `Random random = new Random();

int sum = random.nextInt(101);`、

​ 在进行比较时,用户每输入一个数,就要与产生的随机数进行比较,这边则用循环的方式进行,具体的代码实现如下:

import java.util.*;
public class Demo32{
    public static void main(String[] args){
        Random random = new Random();
        int sum = random.nextInt(101);
        Scanner input = new Scanner(System.in);
         
        while(true){
            System.out.print("请输入一个数字:");
            int num1 = input.nextInt();
            if(num1 == sum){
                System.out.println("猜对了!");
                break;
            }else if(num1 < sum){
                System.out.println("猜小了!");
            }else{
                System.out.println("猜大了!");
            }
        }
    }
}

Demo 33

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H0ivYpx5-1616595609406)(C:\Users\周润甜\AppData\Roaming\Typora\typora-user-images\image-20210324174243210.png)]

​ 求两数的最大公约数,则需要找到两数除一之外最大的且相等的约数。如题中所提示的将两数分别设为n1和n2,将i设为其公约数,并检测是否为最大公约数且k不得大于n1或者n2,由题可知最大公约数可能与其中较小的数相等,故可先令k等于两数中较小的数,在进行递减,递减则可使用循环,if语句则是用来判断是否为两数的约数,具体代码实现如下:

import java.util.*;
public class Demo33{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("请输入数字:");
        int num1 = input.nextInt();
        System.out.print("请输入数字:");
        int num2 = input.nextInt();
        int min = num1 < num2 ? num1 : num2;
        for(int i = min ;i>=1;i--){
            if (num1 % i == 0&&num2%i==0){
                System.out.print(i);
                break;
            }
    	}
	}
}

Demo 34

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mrFQSqOr-1616595609407)(C:\Users\周润甜\AppData\Roaming\Typora\typora-user-images\image-20210324193141355.png)]

​ 本题涉及的是十进制转换问题,将十进制数转换为十六进制。方法则可是对输入的十进制数取余,因为十六进制数涉及字母,所以得引进字符串,字符串的引入则可使用以下语句:

String hex = "";

​ 将十进制数对十六取余记为g,每取余将g赋值给字符串hex,因为十六进制字符向前加,则可写为hex=g+hex,需要使用循环和选择语句,代码显示如下:

import java.util.*;
public class Demo34{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("输入一个数:");
        int num = input.nextInt();
        String hex = "";

        while(num!=0){
            int g = num % 16;
            if(g<10){
                hex=g+hex;
            }else{
                hex=(char)(g-10+65)+hex;
            }
            num/=16;
        }
        System.out.println(hex);
    }
}

Demo 36

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5v4alDnM-1616595609407)(C:\Users\周润甜\AppData\Roaming\Typora\typora-user-images\image-20210324195340835.png)]

​ 本题要求所写代码要解决是否为素数问题, 素数是他的正因子只有一和其本身的数,在循环语句中判断循环是否正常结束时,可以用flag来判断。在判断是否为素数时,设i为因子,从i = 2 开始判断,直到 i 等于需要判断的数本身,若可以整除,则跳出循环,进行下一个数的判断。因为题中要求前50的素数需要按照每行打印10个的规则进行,所以就得对判断出来的素数进行计数,并对其进行10的整除,具体代码如下:

public class Demo36 {
    public static void main(String[] args) {
        int number = 2;
        int count = 0;
        while (count < 50) {
            boolean flag = true;//表示循环是正常结束
            for (int i = 2; i <= number - 1; i++) {
                if (number % i == 0) {
                    flag = false;
                    break;
                }
        }
        if (flag) {
            System.out.print(number + "\t");
            count++;
            if (count % 10 == 0) {
                System.out.println();
            }
        }
        number++;
       }   
    }
}
  

Demo 37

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZNxCS3XM-1616595609408)(C:\Users\周润甜\AppData\Roaming\Typora\typora-user-images\image-20210324202528096.png)]

​ 本题要求统计正数和负数的个数并计算这些数的平均值,对不确定个数的整数进行判断,因为循环不确定循环的步长,故使用while循环,对任何数都可进行循环,在循环体中进行正负数的判断,并对其进行计数同时进行求和,具体代码实现如下所示:

import java.util.*;
public class Demo37{
    public static void main(String[] args) {
        int positives=0,negatives=0;
        double total=0;
        Scanner input = new Scanner(System.in);
        System.out.print("请输入数字:");
        while(true){
            int num = input.nextInt();
        
            if(num>0){
                positives++;
            }else if(num<0){
                negatives++;
            }else{
                break;
            }
            total+=num;
        }
        if (negatives+positives==0){
            System.out.println("No numbers!");

        }else{
            double averange=total/(positives+negatives);
            System.out.println("averange = " + averange);
        
        }  
    }
}

Demo 38

​ 本题要求找出100到1000之间既能被5整除又能被6整除的数,因为每行只能显示10个数,因此要对满足要求的数进行计数,并将其总数对十取余,同时打印输出,代码实现如下:

public class Demo38{
    public static void main(String[] args){
        int count = 0;
        for(int i=100;i<=1000;i++){
            if(i % 5 == 0 && i % 6 == 0){
                System.out.print(i+"\t");
                count++;
                if(count % 10 == 0){
                    System.out.println();
                }
            }
            
        }
    }
}

Demo 39

​ 因为本题要找出100到200之间能被5或6整除,但不能被两者同时整除的数,满足异或关系,判断步骤与Demo 38一致,代码如下:

public class Demo39{
    public static void main(String[] args){
        int count = 0;
        for(int i=100;i<=200;i++){
            if(i % 5 == 0 ^ i % 6 == 0){
                System.out.print(i + "\t");
                count++;
                if(count % 10 == 0){
                    System.out.println();
                }
            }
               
        }
            
     }
}

Demo 40

​ 因为要找出最小因子,则循环从i = 2 开始直到 i <= num(输入的整数)结束,先判断i是否为其因子,在求出整除2的数,继续判断,以此类推,直到 i 等于整数本身,代码如下:

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

Demo 41

本题要求显示金字塔,以第四行为例,数字先递减在递增,满足绝对值函数。i为行数,外循环从 i = 1开始到 i <= line(最后输出的行数),k则代表金字塔前面的空格数,满足 k = line - 1,打印完空格后再打印数字,数字满足的绝对值函数如下图所示:

其具体代码如下所示:

import java.util.*;
public class Demo41 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入行数:");
        int line = input.nextInt();
        for(int i=1;i<=line;i++){
            for(int k = 1;k<=line - i;k++){
                System.out.print("   ");
            }
            for(int j = -(i-1);j<=i-1;j++){
                int temp = Math.abs(j)+1;
                System.out.printf("%d  ",temp);           
            }
            System.out.println();
        }
    }
}

Demo 42

图案一:按照行数的递增,输出的数跟着递增,主要代码如下:

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 = 6 ; i >= 1; i--){
 	for(int j = 1 ; j <= i ; j++){
  		System.out.print(j + " ");
    }
     System.out.println();
 }
 System.out.println();

图案三:这个图形的输出可参照Demo 41 的图案输出,借鉴绝对值函数输出,代码如下:

for(int i = 1; i <= 6; i++){
            for(int j = -5; j <= 0; j++){
                if(Math.abs(j) >= i){
                    System.out.print("  ");
                }else{
                    System.out.print((Math.abs(j) + 1) + " ");
                }
            }
            System.out.println();
        }
        System.out.println();

图案四:先打印空格,在打印数字,数字的输出从一到六递增输出,代码如下:

for(int i = 0; i < 6; i++){
            for(int j = 0; j < 6; j++){
                if(j < i){
                    System.out.print("  ");
                }else{
                    System.out.print((j + 1) + " ");
                }
            }
            System.out.println();
        }

Demo 43

​ 数字的输出满足2的(i-1)次方,同时满足先递减在递增,满足绝对值函数,与Demo 41方法类似,具体的代码如下:

import java.util.*;
public class Demo43{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.print("输入行数:");
        int line = in.nextInt();
        for(int i = 1 ; i <= line ; i++){
            for(int k = 1 ; k <= line - i ; k++){
                System.out.print("   ");
            }
            for(int j = pow(2,( i - 1 )); j <= i ; j++){
                
            }
        }  
    }
}

Demo 45

​ 先定义分子 n ,则分母满足 n + 2 ,并对其进行求和,代码如下:

public class Demo45{
    public static void main(String[] args) {
            double sum = 0;
            // 分子
            for( double n = 1 ; n <= 97 ; n = n + 2){
                sum = sum + n / (n + 2);
            }
        System.out.println("sum = " + sum);
    }
}

Demo 46

​ 计算Π,定义一个sum 表示和,定义pi ,先令其等于4,最后进行pi与sum的乘积并赋值给pi,因为题中的数列加减交替进行,故可将其看作全进行加和,建立一个flag,令其等于1,每循环一次flag乘-1,则可达到题目中的效果,分子均为flag*n,n为次数,分母满足(2n - 1),则代码实现如下:

import java.util.*;
public class Demo46{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.print("请输入i值:");
        double i = in.nextDouble();
        double pi = 4 ;
        double sum = 0 ;
        double flag = 1 ;
        for (double  n = 1 ; n <= 2 * i - 1 ; n++){
            sum = sum + flag / (2 * n - 1);
            flag *= -1;
        }
        pi = pi * sum ;
        System.out.println(pi);
    }
}

Demo 47

​ 分子均为一,分母则为上个分母的累积(阶乘),因为涉及分数,则选择的数据类型为double,e则为累加,代码如下:

public class Demo47 {
    public static void main(String[] args) {
        double e = 0;
        double result = 1;
        double sum = 0;
        for (int i = 1; i <= 10; i++) {
            result = result * i;
            sum = sum + 1 / result;
        }
        sum++;
        System.out.println(sum);
    }
}

Demo 48

​ 由题可知,完全数的最大除数是这个整数的一半,循环从1开始到整数的一半结束,对因子进行累加,直到加和与整数相等,代码如下:

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

Demo 49

​ 定义一个字符串数组arr[]={“剪刀”,“石头”,“布”},数组中 0-剪刀 ,1-石头 ,2-布,并且要建立一个随机的函数,代表计算机,用户随机输入,用选择语句来判断,循环的结束条件为用户或者计算机赢对手两次,故需要使用嵌套语句来实现,具体代码如下:

import java.util.*;
public class Demo49 {
    public static void main(String[] args) {
        //随机产生电脑的结果
        Random random = new Random();
        int com = random.nextInt(3);//[0,3)
        //用户输入
        Scanner input = new Scanner(System.in);
        
        int usrWin = 0;
        int comWin = 0;
        /*
        只考虑用户赢的情况
        usr com
        0 2 0 - 2 = -2
        1 0 1 - 0 = 1
        2 1 2 - 1 = 1
        只考虑电脑赢的情况
        usr com
        2 0 2 - 0 = 2
        0 1 0 - 1 = -1
        1 2 1 - 2 = -1
        */
        while(true){
            System.out.print("请输入 0-剪刀 1-石头 2-布:");
            int usr = input.nextInt();
            String[] arr = {"剪刀","石头","布"};
            if (usr == com) {
                //和局
                System.out.printf("和局!用户是%s,电脑是%s",arr[usr],arr[com]);
            }else if (usr - com == -2 || usr - com == 1) {
                //用户赢
                usrWin++;
                System.out.printf("用户赢!用户是%s,电脑是%s",arr[usr],arr[com]);
            } else{
                //电脑赢
                comWin++;
                System.out.printf("电脑赢!用户是%s,电脑是%s",arr[usr],arr[com]);
            }
            if(usrWin == 2){
                System.out.print("用户胜!");
                break;
            }else if(comWin == 2){
                System.out.print("电脑胜!");
                break;
            }
        }
    }
        
}
   
        usrWin++;
            System.out.printf("用户赢!用户是%s,电脑是%s",arr[usr],arr[com]);
        } else{
            //电脑赢
            comWin++;
            System.out.printf("电脑赢!用户是%s,电脑是%s",arr[usr],arr[com]);
        }
        if(usrWin == 2){
            System.out.print("用户胜!");
            break;
        }else if(comWin == 2){
            System.out.print("电脑胜!");
            break;
        }
    }
}

}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值