先说一下故事的背景:
前一段时间因为自己转战城市需要换工作,所以面试的某省会的一家公司。整个面试的过程,如果满分100,我只能给59分。
首先我个人的表达没有完全说透(我以为的基础理解,应该都知道),我自己也是有问题。其次感受到了面试官的一个高高的态度(开口第一句,工作这么多年,项目系统做得不多)。
作为一个开发过复杂金融系统的开发人员此刻感受到了深深的敌意(鄙人此前的维护过的一个系统,不了解有没有算系统重复代码,至少代码量在4000万行以上)我不知道,面试官哪里来自信。在此也希望看到此篇博客的程序员们,未来不要成为一个傲慢的人。每个人可以对自己很有信心,但是不要去贬低别人的经历,因为那不是你的经历。
========================好了,吐槽到此为止===================
面试的最后是让我用白纸写一个菱形的算法。。。输入任意的基数,可以输出不同的菱形,例如输入5,展示图形如下:
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
这个算法题,其实很简单,翻一下我的博客,早在2017年我在我的博客已经写过,以前没有写具体思路。昨天刚好高考,我也就在此写一下这个题的算法,说透,比高考的数学填空题还easy
这种在代码里面属于中低难度的题型。重点在于分析。
我们以输入5的场景来进行分析,首先我们肯定是要分别打印空格和*号的,然后我们每一行去观察。可以得出如下规律:
第一行:4个空格 1个星号
第二行:3个空格 2个星号
第三行:2个空格 3个星号
第四行:1个空格 4个星号
第五行:0个空格,5个星号
下面的形状倒过来规律
第一行:1个空格 4个星号
第二行:2个空格 3个星号
第三行:3个空格 2个星号
第四行:4个空格 1个星号
我们直接写死可以得出下面的代码:
public class lingxing01 {
public static void main(String[] args) {
//控制行号
for (int i = 0; i < 5; i++) {
//先打印空格
for (int j = 0; j <4-i; j++) {
System.out.print(" ");
}
//再打印*
for (int k = 0; k <= i ; k++) {
System.out.print("* ");
}
//每次打印完毕后换行
System.out.println();
}
for (int i = 0; i < 4; i++) {
//先打印空格
for (int j = 0; j <=i; j++) {
System.out.print(" ");
}
//再打印* 观察阵列的数字规律
for (int j = 0; j <4-i; j++) {
System.out.print("* ");
}
System.out.println();
}
}
}
重点在于是不是看到了规律
下半段的打印也是这样得出的规则。
我们再将上面的代码进行通用化处理,代入变量。代码如下:
import java.util.Scanner;
public class lingxing {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
//控制行号
for (int i = 0; i < n; i++) {
//先打印空格
for (int j = 0; j <n-1-i; j++) {
System.out.print(" ");
}
//再打印*
for (int k = 0; k <= i ; k++) {
System.out.print("* ");
}
//每次打印完毕后换行
System.out.println();
}
for (int i = 0; i < n-1; i++) {
//先打印空格
for (int j = 0; j <=i; j++) {
System.out.print(" ");
}
//再打印* 观察阵列的数字规律
for (int j = 0; j <n-1-i; j++) {
System.out.print("* ");
}
System.out.println();
}
}
}
实际效果展示下:
5
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
3
*
* *
* * *
* *
*
是不是这就是一道找规律填数字的题?
===============结束=====================================
文章最后提醒,各位看客老爷,今后如果有机会当面试官,请不要拿出一张纸给面试者写代码,至少如我这类是很反感的(好歹,你给个电脑)。我也曾经当面试官,面试了不下百人,手写算法,我是没这么弄过,就算出题,也就让说个大致思路就行了。毕竟实际写代码时,5分钟想,1小时调。我想纯手写的年代,也就是大学时的期末考试。
最后希望程序员行业不要越来越卷,大家都幸福安康,哈哈。