代码该不该精简
来源:互联网 发布:美国研究生申请 知乎 编辑:程序博客网 时间:2024/04/28 21:50
项目接近收尾阶段,不是我这种小罗罗该忙的时候了。所以我趁着有空,小小研究了我以前笔试做到过的一道算法题吧。本科毕业一年不到,应届生那个找工作难啊,像我这种没技术小学校出来的软件工程的学生,找工作更加困难。那时候好像有倒题目,我记得大概是画着一个用星号组成菱形的图案,然后让你写程序把这个图像打印出来。因为是在笔试时候,我也懒得浪费脑细胞,二话不说直接,print出来。效果是达到了,总觉得会被人鄙视。后来大概由于找工作过于忙,对这题目也没有深究。今天闲着无事,就拿出来再做做。
我一共用了2个方法,一个是用比较罗嗦的方法,对每一行的星号和空格进行分析,最后实现出来。
具体代码:
private static void makeSquare(int n)...{
int cc = 2*n;
for (int i = 0; i < cc-1 ; i++) ...{
if (i == 0 || i == cc - 2) ...{
System.out.println(makeSpace(n-1) + "★" + makeSpace(n-1));
}else if(i == n-1)...{
System.out.println("★" + makeSpace(cc - 3) + "★");
}else...{
if (i < n-1) ...{
System.out.println(makeSpace(n - 1 - i) + "★" + makeSpace(2 * i - 1) + "★" + makeSpace(n - 1 - i));
}else...{
System.out.println(makeSpace(i - n + 1) + "★" + makeSpace(4 * n - 2 * i - 5) + "★" + makeSpace(i - n + 1));
}
}
}
}
private static String makeSpace(int n)...{
String retStr = "";
for (int i = 0; i < n; i++) ...{
retStr += "X";
}
return retStr;
}
int cc = 2*n;
for (int i = 0; i < cc-1 ; i++) ...{
if (i == 0 || i == cc - 2) ...{
System.out.println(makeSpace(n-1) + "★" + makeSpace(n-1));
}else if(i == n-1)...{
System.out.println("★" + makeSpace(cc - 3) + "★");
}else...{
if (i < n-1) ...{
System.out.println(makeSpace(n - 1 - i) + "★" + makeSpace(2 * i - 1) + "★" + makeSpace(n - 1 - i));
}else...{
System.out.println(makeSpace(i - n + 1) + "★" + makeSpace(4 * n - 2 * i - 5) + "★" + makeSpace(i - n + 1));
}
}
}
}
private static String makeSpace(int n)...{
String retStr = "";
for (int i = 0; i < n; i++) ...{
retStr += "X";
}
return retStr;
}
另外还有一种就是利用斜率来做
private static void makeSquare1(int n)...{
for (int i = 1; i < 2*n; i++) ...{
for (int j = 1; j < 2*n; j++) ...{
if (Math.abs(j - i) == n - 1 || j + i == n + 1 || j + i == 3*n - 1) ...{
System.out.print("★");
}else...{
System.out.print("X");
}
}
System.out.println("");
}
}
for (int i = 1; i < 2*n; i++) ...{
for (int j = 1; j < 2*n; j++) ...{
if (Math.abs(j - i) == n - 1 || j + i == n + 1 || j + i == 3*n - 1) ...{
System.out.print("★");
}else...{
System.out.print("X");
}
}
System.out.println("");
}
}
下面的代码相比上面的代码,虽然精简了一些。但是效率绝对没有上面的程序高。如果传入参数都是1000的话,
上面的方法是只要5秒多的时间,下面的方法要22秒多。仔细分析了下原因,第一种方法是按照行来做判断的,
虽然写的代码多了,但是少了很多的逻辑判断,为CPU减少了负担。第二种方法虽然代码精简了,可是它是按照每个元素来判断的,它的判断步数就多了,相比之下我还是喜欢第一种代码,如果不知道题目的情况下,第一种代码比第2种代码好理解吧。所以不一定精简的代码就效率最高,或许只是我写的代码不够好,如果哪位大侠有更好的实现方法,既快又简便的话,贴上来告诉我哦。
- 代码该不该精简
- [歪谈]经理该不该写代码?
- 该不该下班在家还去看写代码
- 架构师到底该不该写代码
- 写这段代码的人该不该被开除?
- 写这段代码的人该不该被开除?
- 写这段代码的人该不该被开除?
- 写这段代码的人该不该被开除?
- 写这段代码的人该不该被开除?
- 写这段代码的人该不该被开除?
- 写这段代码的人该不该被开除?
- 写这段代码的人该不该被开除?
- 到底该不该办网呢???
- 到底该不该告发
- 该不该的思念
- VFP该不该放弃?
- 该不该结婚啊?
- 数据库该不该用外键
- C++中的template学习
- 嵌入式linux使用交叉编译器编译ACE
- 您买软件也可为灾区捐款-深圳易用将把近期>销售额一半捐出给灾区
- 执行外部文件的API
- 一个C#输出文本文件的问题
- 代码该不该精简
- checkboxList后台绑定取Value 取不到(解决办法)
- GetWindowRect、FFFF8300、4294935296、-32000
- 正则表达式教程-5
- NULL 值处理遇到的错误问题.
- 访数据库有感
- 救命感人故事一
- 正则表达式教程-6
- 正则表达式教程-7