灵光一闪 ~ Diamond
2009-04-01 15:29
288 查看
其实上是我们当时考研复试的上机题目——打印钻石,当时难住了不少人。尽管我做出来了,不过可花了我不少时间。记得当时是采用两层循环来计算,比较麻烦。不过那会儿只求能做出来,哪管得了那么多。
这次一位朋友无意中问到我,我一下子想到一个用自定义零坐标的方法来实现,再加上空间换时间的概念,就成了下面这个小程序。核心代码在7行左右,比当时的少了近2/3。记一下:
可以选择是否空心。最大为39是因为Console程序一行最多只能是80个字符。
(这是我第4次改这个小程序了,前几次是功能上的,这次是改为用STL代替原来的生数组。一朋友说:你老整它干嘛啊?我觉得真正爱好编程的人是乐意对自己的程序去重构的,只要时间和精力允许。)
程序虽小,但却体现出灵感的重要性。多思考就一定会有灵感!
这次一位朋友无意中问到我,我一下子想到一个用自定义零坐标的方法来实现,再加上空间换时间的概念,就成了下面这个小程序。核心代码在7行左右,比当时的少了近2/3。记一下:
#include <iterator> #include <string> #include <iostream> #include <vector> #include <algorithm> namespace Diamond { const int MAXN = 39; const int MAXCOL = 2*MAXN + 1; } void init(std::vector<char> &vc) {vc.assign(Diamond::MAXCOL, ' ');} template <typename T> std::ostream& operator<< (std::ostream& strm, const std::vector<T> &v) { std::vector<T>::const_iterator it; for(it = v.begin(); it != v.end(); ++it) strm << *it; strm << std::endl; return strm; } int main(int argc, char* argv[]) { std::vector<std::vector<char>> matrix(Diamond::MAXN); for_each(matrix.begin(), matrix.end(), init); int n = 6; std::cout << "Please input a integer between (3-" << Diamond::MAXN << "):"; std::cin >> n; if (3 <= n && n <= Diamond::MAXN) { //whether hollow ? char yn = 'y'; std::cout << "Do u wanna a hollow Diamond? [y,n]"; std::cin >> yn; yn = (yn == 'n' || yn == 'N') ? 'n' : 'y'; int zero = n-1; for (int i = 0; i < n; ++i) {//make it out if (i>0 && yn == 'n') matrix[i] = matrix[i-1]; matrix[i][zero+i] = matrix[i][zero-i] = '*'; } //print it out int i=0; while(i< n) std::cout << matrix[i++]; i -= 2; while(i>=0) std::cout << matrix[i--]; } else if (n > Diamond::MAXN) std::cout << "So large Diamond the screen can't contain it!/n"; else std::cout << "Can not make up a Diamond!/n"; return 0; }
可以选择是否空心。最大为39是因为Console程序一行最多只能是80个字符。
(这是我第4次改这个小程序了,前几次是功能上的,这次是改为用STL代替原来的生数组。一朋友说:你老整它干嘛啊?我觉得真正爱好编程的人是乐意对自己的程序去重构的,只要时间和精力允许。)
程序虽小,但却体现出灵感的重要性。多思考就一定会有灵感!
相关文章推荐
- 一个让人灵光一闪的数组C++类Array设计,可以此作为范本进行其他的C++类编写
- 程序员的灵光一闪
- 一个程序员的告白-失败源于没有经验,源于没有指引自己前进的方向,但是成功却是源于99次失败之后偶然的灵光一闪
- 灵光一闪-(面对对象实践)
- 灵光一闪 编程回顾
- RyMiniFramework(1)-菜鸟的灵光一闪
- 灵光一闪
- 灵光一闪时
- 灵光一闪-软件应用
- How to construct a DiamondOfNumbers
- c语言程序一闪就消失,如何让其暂停
- eclipse J2ME调试时模拟器一闪就消失原因
- Diamond
- AS3-45度角地图坐标转换一(Diamond)
- MySQL 输入密码一闪退出解决
- Diamond
- Dev-c++控制台一闪而退解决方案
- diamond和zookeeper
- ZooKeeper和Diamond有什么不同
- 【ZooKeeper Notes 30】配置管理系统ZooKeeper与Diamond有什么不一样