大厂面试题(利用JAVA写一到九求和算法)

简介: 大厂面试题(利用JAVA写一到九求和算法)

求123456789 字符串1..9 之间不改数字位置随机+-要求表达结果和为100,写出这样表达式

package demo;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import java.util.regex.Pattern;

/**
 * @author yeqv
 * @program A2
 * @Classname a3
 * @Date 2022/1/13 17:17
 * @Email w16638771062@163.com
 */
public class a3 {
    public static void main(String[] args) {
        //定义一个集合
        Set<String> set = new HashSet<String>();
        int index = 0;
        while (true) {
            //定义一个字符类型的数组
            String[] s1 = {"", "+", "-"};
            //实例化一个随机生成器对象
            Random rand = new Random();
            //实例化一个字符串类型的构造器对象第一位是字符串“1”
            StringBuilder sbu = new StringBuilder("1");
            //定义一个循环,最大数是9
            for (int i = 2; i <= 9; i++) {
                //向字符串构造器“sbu”中随机插入数组s1中的一个字符串
                sbu.append(s1[rand.nextInt(s1.length)]);
                //向构造器中插入当前循环的数字i
                sbu.append(i);
            }
            //利用正则表达式制定一个格式,每一段开头是+-或者空,后面是0-9之间的数字,例如
            // 12+345-6+78-9
            var p3 = Pattern.compile("[+-]*[0-9]+");
            //将字符串构造器内的字符串与格式匹配
            var m3 = p3.matcher(sbu);
            //定以一个int类型的变量当作式子的和
            int sum = 0;
            //将构造器中的字符串按顺序判断是否与格式匹配
            while (m3.find()) {
                //将子序列字符串转换为int类型赋值与num
                int num = Integer.parseInt(m3.group());
                //将转换后的式子相加
                sum += num;
            }
            //判断式子的和是否为100并且集合中不能包含sbu这个字符串
            if (sum == 100 && !set.contains(sbu.toString())) {
                //输出序列和式子
                System.out.printf("%d、%s = 100%n", ++index, sbu);
                //将字符串添加到集合set中
                set.add(sbu.toString());
            }
            //判断集合中的字符串数量够10个结束
            if (set.size() == 10) {
                break;
            }
        }

    }

}
相关文章
|
1月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
1月前
|
搜索推荐 算法 Java
手写快排:教你用Java写出高效排序算法!
快速排序(QuickSort)是经典的排序算法之一,基于分治思想,平均时间复杂度为O(n log n),广泛应用于各种场合。在这篇文章中,我们将手写一个Java版本的快速排序,从基础实现到优化策略,并逐步解析代码背后的逻辑。
44 1
|
1月前
|
Java C++
【Java基础面试十七】、Java为什么是单继承,为什么不能多继承?
这篇文章讨论了Java单继承的设计原因,指出Java不支持多继承主要是为了避免方法名冲突等混淆问题,尽管Java类不能直接继承多个父类,但可以通过接口和继承链实现类似多继承的效果。
【Java基础面试十七】、Java为什么是单继承,为什么不能多继承?
|
23天前
|
设计模式 缓存 算法
揭秘策略模式:如何用Java设计模式轻松切换算法?
【8月更文挑战第30天】设计模式是解决软件开发中特定问题的可重用方案。其中,策略模式是一种常用的行为型模式,允许在运行时选择算法行为。它通过定义一系列可互换的算法来封装具体的实现,使算法的变化与客户端分离。例如,在电商系统中,可以通过定义 `DiscountStrategy` 接口和多种折扣策略类(如 `FidelityDiscount`、`BulkDiscount` 和 `NoDiscount`),在运行时动态切换不同的折扣逻辑。这样,`ShoppingCart` 类无需关心具体折扣计算细节,只需设置不同的策略即可实现灵活的价格计算,符合开闭原则并提高代码的可维护性和扩展性。
37 2
|
1月前
|
安全 算法 Java
java系列之~~网络通信安全 非对称加密算法的介绍说明
这篇文章介绍了非对称加密算法,包括其定义、加密解密过程、数字签名功能,以及与对称加密算法的比较,并解释了非对称加密在网络安全中的应用,特别是在公钥基础设施和信任网络中的重要性。
|
1月前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。
|
1月前
|
Java
【Java基础面试三十七】、说一说Java的异常机制
这篇文章介绍了Java异常机制的三个主要方面:异常处理(使用try、catch、finally语句)、抛出异常(使用throw和throws关键字)、以及异常跟踪栈(异常传播和程序终止时的栈信息输出)。
|
1月前
|
Java
【Java基础面试三十八】、请介绍Java的异常接口
这篇文章介绍了Java的异常体系结构,主要讲述了Throwable作为异常的顶层父类,以及其子类Error和Exception的区别和处理方式。
|
1月前
|
Java
【Java基础面试十六】、Java中的多态是怎么实现的?
这篇文章解释了Java中多态的实现机制,主要是通过继承,允许将子类实例赋给父类引用,并在运行时表现出子类的行为特征,实现这一过程通常涉及普通类、抽象类或接口的使用。
|
1月前
|
缓存 Java
【IO面试题 一】、介绍一下Java中的IO流
Java中的IO流是对数据输入输出操作的抽象,分为输入流和输出流,字节流和字符流,节点流和处理流,提供了多种类支持不同数据源和操作,如文件流、数组流、管道流、字符串流、缓冲流、转换流、对象流、打印流、推回输入流和数据流等。
【IO面试题 一】、介绍一下Java中的IO流