目录
前言
刚学完 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
总结
应该深入学习数据结构和算法了。