初识java——熟悉java代码格式

1年前 (2023) 程序员胖胖胖虎阿
127 0 0

ced485cbb11e458d81a746890b32cf3f.gif

作者:敲代码の流川枫

博客主页:流川枫的博客

专栏:和我一起学java

语录:Stay hungry stay foolish

工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网

点击免费注册和我一起刷题吧  

文章目录

题目一 

题目二

题目三

题目四

题目五

题目六


点击题目链接即可跳转答题

题目一 

 CD145 整数的二进制数表达中有多少个1

求一个整数,在内存当中存储时,二进制1的个数。 

方法一:一个整型的数字共32个比特位,每个比特位如何判断是否为1?只需让这一位和1进行按位与即可

初识java——熟悉java代码格式

import java.util.Scanner;
public class test {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n= scanner.nextInt();
        int count=0;
        for (int i = 1; i <=32 ; i++) {
            if(((n>>i)&1)==1){
                count++;
            }
        }
        System.out.println("二进制中1的个数:"+count);
    }
}

这种方法的缺陷在于:每个数都要按位与完32位,比如1只有第一位是1,后面31个0没有必要比较

优化:

import java.util.Scanner;
public class Main{
    public static void main1(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int count = 0;
        while (n != 0) {//如果移动的过程当中是0了,就结束循环
            if((n & 1) != 0) {
                count++;
            }
            n = n >>> 1;
        }
        System.out.println(count);
    }
}

初识java——熟悉java代码格式

 方法二:

采用相邻的两个数据进行按位与运算

第一次循环:n=7  n=n&(n-1) = 7 & 6 = 6

第二次循环:n=6  n=n&(n-1)= 6 & 5= 4

第三次循环:n=4  n=n&(n-1)=4 & 3= 0

此种方式,数据的二进制比特位中有几个1,循环就循环几次,而且中间采用了位运算,处理起来比较高效

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int count = 0;
    while (n != 0) {
        n = n & (n-1);
        count++;
    }
    System.out.println(count);
}

题目二

ZJ17 水仙花数

求出0~n之间的所有“水仙花数”并输出。

(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本 身,如;153=1^3+5^3+3^3,则153是一个“水仙花数“。)

解题思路:

1. 求取该数是几位数

2. 获取该数中每个位置上的数据,并对其进行立方求和

3. 对该数中每个位上的数据立方求和完成后,在检测其结果是否与该数相等即可,

相等:则为水仙花数,否则:不是

import java.util.Scanner;

public class test {
   public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n= scanner.nextInt();
        int i=0;
        for (i = 0; i <=n; i++) {
            int count=1;
            int tmp=i;
            int sum=0;
           while(tmp/10!=0){
               //求数的位数
                   count++;
                   tmp=tmp/10;
           }
            //计算每一位的次方和
            tmp=i;
           while(tmp!=0){
               sum+=Math.pow(tmp%10,count);
               tmp=tmp/10;
           }
            //判断
            if(sum==i){
                System.out.println(i);
            }
        }
    }
}

题目三

和我一起学java

输出一个整数的每一位,如:123的每一位是3,2,1

解题思路:

本题主要考虑,如何获取一个数字的每一位:

123 % 10 = 3

123/10=12 12%10=2

12/10=1 1%10= 1

import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n= scanner.nextInt();
        while (n != 0) {
            System.out.println(n % 10);
            n /= 10;
        }
    }
}

初识java——熟悉java代码格式

题目四

模拟登陆

编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输 入,最多输入三次。三次均错,则提示退出程序

 字符串怎么比较相同?使用方法equals

import java.util.Scanner;
public class test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int count = 3;
        while (count != 0) {
            System.out.println("请输入你的密码:");
            String password = scanner.nextLine();
            if(password.equals("123")) {
                System.out.println("登录成功!");
                break;
            }else {
                count--;
                System.out.println("你还有"+count+" 次机会!");
            }
        }
    }

初识java——熟悉java代码格式

题目五

二进制序列

获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列

解题思路:

 检测num中某一位是0还是1的方式:

1. 将num向右移动i位

2. 将移完位之后的结果与1按位与,如果:

结果是0,则第i个比特位是0

结果是非0,则第i个比特位是1

import java.util.Scanner;
public class test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        //0000 0010
        for (int i = 31; i >= 1 ; i-=2) {
            System.out.print(((n>>>i) & 1) + " " );
        }
        System.out.println();
        for (int i = 30; i >= 0 ; i-=2) {
            System.out.print(((n>>>i) & 1) + " " );
        }
    }
}

初识java——熟悉java代码格式

题目六

计算分数的值

计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值 。

解题思路:

1. 从上述表达式可以分析出

  a. 该表达式主要由100项,基数项为正,偶数项为负

2. 设置一个循环从1~100,给出表达式中的每一项:1.0/i, 注意此处不能使用1,否则结果全部为0

  然后使用flag标记控制奇偶项,奇数项为正,偶数项为负

  然后将所有的项相加即可

public class test {
    public static void main(String[] args) {

        double sum = 0;
        int flg = 1;
        for (int i = 1; i <= 100; i++) {
            sum += 1.0/i * flg;
            flg = -flg;
        }
        System.out.println(sum);
    }
}

初识java——熟悉java代码格式

题目六

输出乘法口诀表

public class test {
    public static void main(String[] args) {
        for (int i = 1; i <= 9 ; i++) {
            for (int j = 1; j <= i; j++) {
                //注意这里的拼接,不要是换行
                System.out.print(j+"*"+i+"="+i*j+" ");
            }
            System.out.println();
        }
    }
}

初识java——熟悉java代码格式

 “ 本期的分享就到这里了, 记得给博主一个三连哈,你的支持是我创作的最大动力!

ced485cbb11e458d81a746890b32cf3f.gif

版权声明:程序员胖胖胖虎阿 发表于 2023年9月2日 下午12:32。
转载请注明:初识java——熟悉java代码格式 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...