没错,我是一个程序媛,明明可以靠颜值却偏偏想靠实力的程序媛。想通过自己的专业在互联网公司占有一席之地。非名校出身,专业基础知识浅薄,没看过什么技术博客也没写过什么技术博客。通过人品挤进一家大型互联网公司做起了JAVA程序媛。
本着笨鸟先飞的原则,在毕业之前就主动申请来公司实习,开始了我在公司的进修之路。现在刚刚做完周汇报,老大、师傅和同事都没有难为我问什么问题。没错,第一周的周汇报。 来这里第一天老大和师傅就询问了自己的技术怎么样,实话实说。师傅默默找出一本《JAVA编程思想》布置了第一周的任务:
1.java基础知识回顾:java编程思想1-6章。
2.git基础知识学习:学习git的clone、commit、fetch、push、rebase等基本操作,学会处理冲突。
3.使用java完成汉诺塔问题,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆(如,任意一个盘子,其必须堆在比它大的盘子上面)。
同时,你必须满足以下限制条件:
(1) 每次只能移动一个盘子。
(2) 每个盘子从堆的顶部被移动后,只能置放于下一个堆中。
(3) 每个盘子只能放在比它大的盘子上面。
(4) 使用堆栈模拟该问题,不能使用递归。
(5) 盘子和塔使用对象表示。
(6) 输入盘子数量,打印移动过程。
(7) 给出算法时间空间复杂度。
好了,大家应该知道我是啥水平了。。。。部门其实工作时间很灵活,只要保证上午九点半到下午四点半在工位就行,但自己还是每天八点到工位,晚上七点之后走。一周学习任务基本,但通过汇报还是有所反思:
1、部门很注重JAVA命名规范问题,以后注意;
2、面向对象思想体现的的不极致,盘子和塔也要封装成对象(我认为没必要就忽略了这一条);
3、网上的算法即使搬过来也要自己仔细看,推敲。(被师傅问到了一个问题)。
4、养成做读书笔记的好习惯
最后奉上汉诺塔算法:
import java.util.Scanner;
class Problem {
int n,n1;
char A,B,C;
public Problem(int n, char A, char B, char C,int n1) {
this.n = n;
this.A=A;
this.B=B;
this.C=C;
this.n1=n1;
}
}
public class HanoiStack {
public static void main(String[] args) {
Stack hanoi = new MyArrayStack();
System.out.println("请输入盘子的数量");
Scanner s=new Scanner(System.in);
int number=s.nextInt();
hanoi.push(new Problem(number, 'A', 'B', 'C',number));
Problem myProblem = null;
while (!hanoi.isEmpty()) {
System.out.println(myProblem);
if (myProblem.n == 1) {
System.out.println("将盘子"+myProblem.n1+"从塔"+myProblem.A+"移动到塔"+myProblem.C);
} else {
hanoi.push(new Problem(myProblem.n-1, myProblem.B, myProblem.A, myProblem.C,myProblem.n-1));
hanoi.push(new Problem(1, myProblem.A, myProblem.B, myProblem.C,myProblem.n));
hanoi.push(new Problem(myProblem.n-1, myProblem.A, myProblem.C, myProblem.B,myProblem.n-1));
}
}
}
}
网友评论