2021-07-28刷的算法题

Posted 可持续化发展

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-07-28刷的算法题相关的知识,希望对你有一定的参考价值。

输入描述:
输入一个整数(int类型)

输出描述:

这个数转换成2进制后,输出1的个数

示例1
输入:
5
复制
输出:
2

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int num = new Scanner(System.in).nextInt();
        int sum = 1;
        //十进制转二进制,就是这个数一直除以2,余数从下往上写。
        while(num != 1){
            if(num%2 == 1){
                sum++;
            }
            num /= 2;
        }
        System.out.println(sum);
    }
}

HJ1 字符串最后一个单词的长度

描述
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。

输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。

输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。

示例1
输入:
hello nowcoder
复制
输出:
8
复制
说明:
最后一个单词为nowcoder,长度为8

import java.util.*;

public class Main {

    public static void main(String[] args) {

        String[] strs = new Scanner(System.in).nextLine().split(" ");
        System.out.println(strs[strs.length - 1].length());

    }
    
}

HJ2 计算某字母出现次数

描述
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字母,然后输出输入字符串中该字母的出现次数。不区分大小写,字符串长度小于500。

输入描述:
第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字母。

输出描述:
输出输入字符串中含有该字符的个数。

示例1
输入:
ABCabc
A
复制
输出:
2

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine().toLowerCase();
        char target = in.nextLine().toLowerCase().toCharArray()[0];
        int count = 0;
        char[] charArr = str.toCharArray();        
        for(int i = 0; i < charArr.length; i++) {
           if(target == charArr[i]) {
        	   count++;
           }            
        }
        System.out.println(count);        
    }
}

HJ3 明明的随机数

描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据(用于不同的调查),希望大家能正确处理)。

注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。

当没有新的输入时,说明输入结束。

输入描述:
注意:输入可能有多组数据(用于不同的调查)。每组数据都包括多行,第一行先输入随机整数的个数N,接下来的N行再输入相应个数的整数。具体格式请看下面的"示例"。

输出描述:
返回多行,处理后的结果

示例1
输入:
3
2
2
1
11
10
20
40
32
67
40
20
89
300
400
15
复制
输出:
1
2
10
15
20
32
40
67
89
300
400
复制
说明:
输入解释:
第一个数字是3,也即这个小样例的N=3,说明用计算机生成了3个1到1000之间的随机整数,接下来每行一个随机数字,共3行,也即这3个随机数字为:
2
1
1
所以第一个小样例的输出为:
1
2
第二个小样例的第一个数字为11,也即…(类似上面的解释)…
所以第二个小样例的输出为:
10
15
20
32
40
67
89
300
400
所以示例1包含了两个小样例!!

import java.util.*;

public class Main{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextInt())
        {
            //一个用例打印完后,新创建一个TreeSet,来清空数据。
            Set<Integer> ts = new TreeSet<Integer>();
            int N=sc.nextInt();
            for(int i=0;i<N;i++)
                ts.add(sc.nextInt());
//             for(int i:ts)
//                 System.out.println(i);
            Iterator<Integer> it=ts.iterator();
            while(it.hasNext())
                System.out.println(it.next());
        }
        sc.close();
    }
}

HJ4 字符串分隔

描述
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述:
连续输入字符串(输入多次,每个字符串长度小于100)

输出描述:
输出到长度为8的新字符串数组

示例1
输入:
abc
123456789
复制
输出:
abc00000
12345678
90000000

HJ4 字符串分隔

描述
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述:
连续输入字符串(输入多次,每个字符串长度小于100)

输出描述:
输出到长度为8的新字符串数组

示例1
输入:
abc
123456789
复制
输出:
abc00000
12345678
90000000

import java.util.*;

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNext()) {
            //妙啊!先补8个0,这样的话,我8个8个的划分,
            //有多少组8个,就打印多少行
            String strs = scanner.nextLine() + "00000000";

            for (int i = 8; i < strs.length(); i += 8) {
                System.out.println(strs.substring(i - 8, i));
            }

        }

    }
}

HJ17 坐标移动

描述
开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。

输入:

合法坐标为A(或者D或者W或者S) + 数字(两位以内)

坐标之间以;分隔。

非法坐标点需要进行丢弃。如AA10; A1A; % ; YAD; 等。

下面是一个简单的例子 如:

A10;S20;W10;D30;X;A1A;B10A11;;A10;

处理过程:

起点(0,0)

  • A10 = (-10,0)

  • S20 = (-10,-20)

  • W10 = (-10,-10)

  • D30 = (20,-10)

  • x = 无效

  • A1A = 无效

  • B10A11 = 无效

  • 一个空 不影响

  • A10 = (10,-10)

结果 (10, -10)

注意请处理多组输入输出

输入描述:
一行字符串

输出描述:
最终坐标,以逗号分隔

示例1
输入:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
复制
输出:
10,-10

import java.util.Scanner;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String str = sc.nextLine().toUpperCase();
            String[] strs = str.split(";");
            int[] zb = {0, 0};
            for(String s : strs){
            //核心就是正则表达式的运用
                if(s.matches("[ADWS]\\\\d{1,2}")){
                    int num = Integer.valueOf(s.substring(1));
                    if(s.charAt(0) == 'A'){
                        zb[0] -= num;
                    }else if(s.charAt(0) == 'W'){
                        zb[1] += num;
                    }else if(s.charAt(0) == 'S'){
                        zb[1] -= num;
                    }else if(s.charAt(0) == 'D'){
                        zb[0] += num;
                    }
                }
            }
            System.out.println(zb[0] + "," + zb[1]);
        }
    }
}

HJ37 统计每个月兔子的总数

描述
有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?

本题有多组数据。

输入描述:
输入int型表示month

输出描述:
输出兔子总数int型

示例1
输入:
9
复制
输出:
34

import java.util.*;

public class Main{
    
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        
        while(in.hasNextInt()){
            int n = in.nextInt();
            int F1 = 1,F2 = 1;
            //求第n个月,i到第n-1个月再执行一次结束
            //斐波那契数列,取的是数列规律那两个数中的前面一个。
            for(int i = 1;i < n;i++){
                int temp = F1 + F2;
                F1 = F2;
                F2 = temp;
//                 System.out.println("第"+i+"个月"+ " "+F1);
            }
            
            System.out.println(F1);
//             System.out.println(F2);
        }
        
    }
    
}

以上是关于2021-07-28刷的算法题的主要内容,如果未能解决你的问题,请参考以下文章

刷算法题浅谈

LeetCode Java刷题笔记汇总

剑指offer刷题排序算法

剑指offer刷题查找算法

算法题:猜数字-Python实现

知乎万赞,值得反复刷的Android面试题