公司面试的算法机试题,细想之下并不难!

目录

前言

一、小小算法题

1.题目

2.题目理解

二、小小算法题实现

总结


前言

刚学完 Java 编程出来面试公司,其中有家公司出了机试题,其中有一道小小算法题。敲了半天代码也没有完整实现出来,可见基础有多差了,在加上当时的环境,也很难静下心来思考。虽然没有完整实现出来,在面试官检查时自己还是说了一下实现思路。后来回到家中,经过认真思考,验证,写了出来。那么在这里记录一下,继续学习,学习,学习!


一、小小算法题

1.题目

这道题只记着大概,大致意思是:输入一个数,比如说输入4。这时会输出:               

4 = 1 + 1 + 1 + 1
4 = 1 + 2 + 1 
4 = 1 + 3
4 = 2 + 1 + 1
4 = 2 + 2
4 = 3 + 1

2.题目理解

这道题可能是一道数学分解问题,要求将一个给定的数进行分解,并找出所有可能的分解方式。那么对于这道题目理解的关键是将一个数分解成若干个加数,这些加数相加为这个数。同时也可以发现分解的加数从最小1开始,比如第一行将4分解为4个1相加。第二行第二个加数为2,那么第二行将4分解为1,2,1,那么相加也是4。这样可以确保找出所有的分解方式。

这样看来,和我们自己手动找分解方式是一样的过程。

二、小小算法题实现

以下是该题目的具体实现:

public class Test {

    public static void main(String[] args) {

        // 提示输入一个整数
        System.out.println("请输入一个小于10的正整数:");
        // 获取输入数据
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();

        // 确保输入一个较小的整数
        if (num > 0 && num < 10) {
            // 小于输入数的所有正整数存放在数组中
            int[] smallerNums = new int[num-1];
            for (int i = 0; i < num-1; i++) {
                smallerNums[i] = i+1;
            }

            for (int i = 0; i < smallerNums.length; i++) {
                for (int j = 0; j < smallerNums.length; j++) {
                    int sum = 0;
                    String str = num + "=" + smallerNums[i] + "+" + smallerNums[j];
                    sum += smallerNums[i] + smallerNums[j];
                    while(sum < num){
                        sum += 1;
                        str += "+" +1;
                    }
                    if(sum == num){
                        System.out.println(str);
                    }
                }
            }

        } else {
            System.out.println("您输入的不是一个小于10的正整数!请重新运行输入!");
        }

    }

}

我们输入6,执行结果如下:

6=1+1+1+1+1+1
6=1+2+1+1+1
6=1+3+1+1
6=1+4+1
6=1+5
6=2+1+1+1+1
6=2+2+1+1
6=2+3+1
6=2+4
6=3+1+1+1
6=3+2+1
6=3+3
6=4+1+1
6=4+2
6=5+1

总结

应该深入学习数据结构和算法了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程火箭车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值