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


    ced485cbb11e458d81a746890b32cf3f.gif

    作者:敲代码の流川枫

    博客主页:流川枫的博客

    专栏:C语言从入门到进阶

    语录:Stay hungry stay foolish

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

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

    文章目录

    题目一 

    题目二

    题目三

    题目四

    题目五

    题目六


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

    题目一 

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

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

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

    1. import java.util.Scanner;
    2. public class test {
    3. public static void main(String[] args) {
    4. Scanner scanner=new Scanner(System.in);
    5. int n= scanner.nextInt();
    6. int count=0;
    7. for (int i = 1; i <=32 ; i++) {
    8. if(((n>>i)&1)==1){
    9. count++;
    10. }
    11. }
    12. System.out.println("二进制中1的个数:"+count);
    13. }
    14. }

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

    优化:

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

     方法二:

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

    第一次循环: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,循环就循环几次,而且中间采用了位运算,处理起来比较高效

    1. public static void main(String[] args) {
    2. Scanner scanner = new Scanner(System.in);
    3. int n = scanner.nextInt();
    4. int count = 0;
    5. while (n != 0) {
    6. n = n & (n-1);
    7. count++;
    8. }
    9. System.out.println(count);
    10. }

    题目二

    ZJ17 水仙花数

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

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

    解题思路:

    1. 求取该数是几位数

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

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

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

    1. import java.util.Scanner;
    2. public class test {
    3. public static void main(String[] args) {
    4. Scanner scanner=new Scanner(System.in);
    5. int n= scanner.nextInt();
    6. int i=0;
    7. for (i = 0; i <=n; i++) {
    8. int count=1;
    9. int tmp=i;
    10. int sum=0;
    11. while(tmp/10!=0){
    12. //求数的位数
    13. count++;
    14. tmp=tmp/10;
    15. }
    16. //计算每一位的次方和
    17. tmp=i;
    18. while(tmp!=0){
    19. sum+=Math.pow(tmp%10,count);
    20. tmp=tmp/10;
    21. }
    22. //判断
    23. if(sum==i){
    24. System.out.println(i);
    25. }
    26. }
    27. }
    28. }

    题目三

    给一个不多于5位的正整数

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

    解题思路:

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

    123 % 10 = 3

    123/10=12 12%10=2

    12/10=1 1%10= 1

    1. import java.util.Scanner;
    2. public class test {
    3. public static void main(String[] args) {
    4. Scanner scanner=new Scanner(System.in);
    5. int n= scanner.nextInt();
    6. while (n != 0) {
    7. System.out.println(n % 10);
    8. n /= 10;
    9. }
    10. }
    11. }

    题目四

    模拟登陆

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

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

    1. import java.util.Scanner;
    2. public class test {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. int count = 3;
    6. while (count != 0) {
    7. System.out.println("请输入你的密码:");
    8. String password = scanner.nextLine();
    9. if(password.equals("123")) {
    10. System.out.println("登录成功!");
    11. break;
    12. }else {
    13. count--;
    14. System.out.println("你还有"+count+" 次机会!");
    15. }
    16. }
    17. }

    题目五

    二进制序列

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

    解题思路:

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

    1. 将num向右移动i位

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

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

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

    1. import java.util.Scanner;
    2. public class test {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. int n = scanner.nextInt();
    6. //0000 0010
    7. for (int i = 31; i >= 1 ; i-=2) {
    8. System.out.print(((n>>>i) & 1) + " " );
    9. }
    10. System.out.println();
    11. for (int i = 30; i >= 0 ; i-=2) {
    12. System.out.print(((n>>>i) & 1) + " " );
    13. }
    14. }
    15. }

    题目六

    计算分数的值

    计算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标记控制奇偶项,奇数项为正,偶数项为负

      然后将所有的项相加即可

    1. public class test {
    2. public static void main(String[] args) {
    3. double sum = 0;
    4. int flg = 1;
    5. for (int i = 1; i <= 100; i++) {
    6. sum += 1.0/i * flg;
    7. flg = -flg;
    8. }
    9. System.out.println(sum);
    10. }
    11. }

    题目六

    输出乘法口诀表

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

     

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

    ced485cbb11e458d81a746890b32cf3f.gif

  • 相关阅读:
    HighCharts点击无响应问题
    Bash基本功能—输入输出重定向
    verilog 从入门到看得懂---matlab 自动生成verilog
    MindSponge分子动力学模拟——使用MDAnalysis工具进行后分析(2024.02)
    Java代码审计前置知识——Spring框架AOP和IoC
    如何检测照片中共有多少张人脸,机器学习
    数据结构 - 二叉树
    利用Tensorrt实现int8量化
    intellij 使用
    带头循环双向链表专题
  • 原文地址:https://blog.csdn.net/chenchenchencl/article/details/126045929