您的位置:首页 > 职场人生

一个无聊的面试题

2011-01-04 13:22 162 查看
公司糟了灾,年底了还要去找工作,真是流年不利啊。面试题啥的,向来是很反感的,有啥意义呢?哎~~,世道如此,只好把面经啥的又捧起来看了,烦啊。

题目很简单了,就是打印下面这种样式的字符,主要的逻辑很简单,可是面经上的解答实在不给力啊,直接就main里一个for就打印出来,这不是骗小孩么,也不知道那时候买这个干嘛,不过那会刚毕业,也差不多是个小屁孩了。往简单了想,变化点有三个,一个是打印的行数,一个是打印到什么位置,一个是打印的花纹,OO啥的不折腾了,就用C风格写下算了。





打印的风格函数用回调函数来隔离变化,比如上面的图里第一行是有星号,没点号的。需求变化的话,可以变成从第一行开始就有点号,第二行有两个点这样依次。关于打印的位置,这里就用c++流里的基类函数ostream,ofstream因为是派生自它的,而<< 是虚函数。看代码:

typedef void (*PrintUnit) (int rowNum, ostream* out);

void PrintUintWithStyle1(int rowNum, ostream* out) {
//print star *
(*out)<<'*';
for (int i=0; i<rowNum; i++) {
(*out)<<'.';
}
}

void PrintUintWithStyle2(int rowNum, ostream* out) {
//print star *
(*out)<<'*';
for (int i=0; i<rowNum+1; i++) {
(*out)<<'.';
}
}

void PrintRows(int rows, PrintUnit fp, ostream* out) {
for(int i=0; i<10; i++) {
for(int k=0; k<i+1; k++) {
fp(i, out);
}
(*out)<<endl;
}
}

void Print10RowsWithStyle1ToStdout() {
PrintRows(10, PrintUintWithStyle1, &cout);
}

void Print10RowsWithStyle2ToFile() {
ofstream fout("1.txt");
PrintRows(10, PrintUintWithStyle2, &fout);
}

int main(int argc, char* argv[]){
Print10RowsWithStyle1ToStdout();
Print10RowsWithStyle2ToFile();

return 0;
}

最后在屏幕上打印出:





在文件里打印出:

*.

*..*..

*...*...*...

*....*....*....*....

*.....*.....*.....*.....*.....

*......*......*......*......*......*......

*.......*.......*.......*.......*.......*.......*.......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: