我是靠谱客的博主 无心大白,最近开发中收集的这篇文章主要介绍Java笔试——2021届秋招编程题汇总1. 硬币找零,最少多少张纸币2. 将序列排序3. 判断两个矩形是否相交4. 从字符串中提取整数5. 编写注册验证功能6. 分解数字相乘后的最大值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 1. 硬币找零,最少多少张纸币
  • 2. 将序列排序
  • 3. 判断两个矩形是否相交
  • 4. 从字符串中提取整数
  • 5. 编写注册验证功能
  • 6. 分解数字相乘后的最大值

1. 硬币找零,最少多少张纸币

描述:有1,5,10,50,100元,分别有:a、b、c、d、e张纸币。
若需要支付k元,最少需要多少张纸币能找零,若无解则输出-1

package kdxf;

import java.util.HashMap;
import java.util.Scanner;

public class Test01 {
    static HashMap<Integer,Integer> data = new HashMap<>();
    static int res = Integer.MAX_VALUE;
    static int[] num = {1,5,10,50,100};
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        for(int i=0;i<5;i++){

            int p = sc.nextInt();
            data.put(num[i],p);
        }
        int sum = sc.nextInt();
        dfs(sum,0,4);
        System.out.println(res==Integer.MAX_VALUE?-1:res);
    }

    public static void dfs(int sum,int count,int start){
        if (sum ==0 ){
            res = Math.min(res,count);
            return;
        }else{
            for(int i=start;i>=0;i--){
                if (num[i]<=sum&&data.get(num[i])!=0){
                    int money = data.get(num[i]);
                    int flag = 0;
                    if (money*num[i]<=sum){
                        count+=money;
                        data.put(num[i],0);
                        flag = sum - money*num[i];
                    }else{
                        int q = sum/num[i];
                        count+=q;
                        data.put(num[i],data.get(num[i])-q);
                                flag = sum - q*num[i];
                    }

                    dfs(flag,count,start-1);
                    return;
                }
            }
        }
    }
}

运行结果:
在这里插入图片描述

2. 将序列排序

描述:给出一个数字序列,需要输出排序过程

package kdxf;

import java.util.Scanner;

public class Test02 {

    static int[] data;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int num = sc.nextInt();
        data = new int[num];
        for(int i=0;i<num;i++){
            data[i]=sc.nextInt();
        }
        sort(0,num-1);
    }

    public static void sort(int left,int right){
        if (left>=right) return;
        int start = left;
        int end = right;
        int now = data[left];
        while (left<right){
            int n;
            int m;
            while (left<right&&data[right]>now){
                right--;
            }
            while(left<right&&data[left]<=now){
                left++;
            }
            int tmp = data[right];
            data[right] =data[left];
            data[left] =tmp;
        }
        int p = data[start];
        data[start] = data[left];
        data[left] = p;
        print();
        sort(start,left-1);
        sort(left+1,end);
    }

    public static void print(){
        for(int i=0;i<data.length;i++){
            if (i==data.length-1){
                System.out.println(data[i]);
                return;
            }
            System.out.print(data[i]+" ");
        }
    }
}

运行结果:
在这里插入图片描述

3. 判断两个矩形是否相交

描述:给定坐标:(0,0),(2,3),(1,2),(5,4)
判断前两个点对角线构成的矩形是否与后两个点构成的矩形相交
相交则输出1,否则输出0

package kdxf;

import java.util.Arrays;
import java.util.Scanner;

public class Test03 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[][] a = new int[2][2];
        int[][] b = new int[2][2];
        for(int i=0;i<2;i++){
            a[i][0] = sc.nextInt();
            a[i][1] = sc.nextInt();
        }
        for(int i=0;i<2;i++){
            b[i][0] = sc.nextInt();
            b[i][1] = sc.nextInt();
        }
        Arrays.sort(a,(o1, o2)->o1[0]-o2[0]);
        Arrays.sort(b,(o1,o2)->o1[0]-o2[0]);

        int aminx= Math.min(a[0][0],a[1][0]);
        int amaxx= Math.max(a[0][0],a[1][0]);
        int aminy= Math.min(a[0][1],a[1][1]);
        int amaxy= Math.max(a[0][1],a[1][1]);

        int bminx= Math.min(b[0][0],b[1][0]);
        int bmaxx= Math.max(b[0][0],b[1][0]);
        int bminy= Math.min(b[0][1],b[1][1]);
        int bmaxy= Math.max(b[0][1],b[1][1]);

        boolean res = find(aminx,aminy,bminx,bmaxx,bminy,bmaxy)||
                find(aminx,amaxy,bminx,bmaxx,bminy,bmaxy)||
                find(amaxx,aminy,bminx,bmaxx,bminy,bmaxy)||
                find(amaxx,amaxy,bminx,bmaxx,bminy,bmaxy)||
                find(bminx,bminy,aminx,amaxx,aminy,amaxy)||
                find(bminx,bmaxy,aminx,amaxx,aminy,amaxy)||
                find(bmaxx,bminy,aminx,amaxx,aminy,amaxy)||
                find(bmaxx,bmaxy,aminx,amaxx,aminy,amaxy);
        if (res) System.out.println(1);
        else System.out.println(0);
    }
    public static boolean find(int x,int y,int xmin,int xmax,int ymin ,int ymax){
        if (x>=xmin&&x<=xmax&&y>=ymin&&y<=ymax){
            return true;
        }else {
            return false;
        }
    }
}

运行结果:
在这里插入图片描述

4. 从字符串中提取整数

描述:例如:1a2
输出:12

package kdxf;

import java.util.Scanner;

public class Test04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String data = sc.nextLine();
        int flag = 0;
        for(int i=0;i<data.length();i++){
            if (i==0&&data.charAt(i)=='-'){
                flag =1;
                System.out.print('-');
            }
            if (data.charAt(i)>='0'&&data.charAt(i)<='9'){
                System.out.print(data.charAt(i));
            }
        }
        System.out.println();
    }
}

运行结果:
在这里插入图片描述

5. 编写注册验证功能

题目要求:编写注册验证功能
1.原系统中包括两个注册好的账号“zhangsan"和"lisi",要求新注册的账号用户名不能已经存在,否则输出”用户名已经存在“,中止程序。
2.密码必须是8到16位,且必须由数字和字母组成,否则输出”密码格式不正确“,中止程序。
3.手机号码必须是11位,且开头必须是1,否则输出”请输入正确的手机号“,中止程序
4.如果全部输入正确,输出”注册成功“

import java.util.Scanner;
public class demo02 {
    public static void main(String[] args) {
        //输入
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户名");
        int flag=0;
        while(flag==0) {
            String name=sc.next();
            flag=user(name,flag);
            if(flag==1) {
                break;
            }
            System.out.println("请输入密码");
            String passerword=sc.next();
            flag=passerword(passerword,flag);
            if(flag==1) {
                break;
            }
            System.out.println("请输入手机号");
            String phone=sc.next();
            flag=phone(phone,flag);
            if(flag==1) {
                break;
            }
            System.out.println("注册成功");
            break;
        }

    }
    private static int phone(String phone, int flag) {
        if(phone.charAt(0)!=1||phone.length()!=11) {
            System.out.println("请输入正确的手机号");
            flag=1;
        }
        return flag;
    }
    private static int passerword(String passerword, int flag) {
        if(passerword.length()<8||passerword.length()>16) {
            System.out.println("密码格式错误");
            flag=1;
        }
        return flag;
    }
    private static int user(String name,int flag) {
        if(name.equals("zhangsan")||name.equals("lisi")) {
            System.out.println("该用户名已存在");
            flag=1;
        }
        return flag;
    }
}

6. 分解数字相乘后的最大值

题目要求: 将输入的数字n(n>=0)分解,然后让分解的数字相乘,求相乘后的最大值。
例如:
输入: 5
输出: 6

import java.util.Scanner;
public class demo03 {
    public static void main(String[] args) {
        //输入
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个数字");
        long n=sc.nextLong();

        //处理
        if(n==0) {
            System.out.println(0);
        }else if(n%2==0) {
            long m=(n/2)*(n/2);
            System.out.println(m);
        }else {
            long m=(n/2)*(n/2+1);
            System.out.println(m);
        }
    }
}

最后

以上就是无心大白为你收集整理的Java笔试——2021届秋招编程题汇总1. 硬币找零,最少多少张纸币2. 将序列排序3. 判断两个矩形是否相交4. 从字符串中提取整数5. 编写注册验证功能6. 分解数字相乘后的最大值的全部内容,希望文章能够帮你解决Java笔试——2021届秋招编程题汇总1. 硬币找零,最少多少张纸币2. 将序列排序3. 判断两个矩形是否相交4. 从字符串中提取整数5. 编写注册验证功能6. 分解数字相乘后的最大值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部