现在的位置: 首页 > 综合 > 正文

一道面试题的多种想法

2013年10月12日 ⁄ 综合 ⁄ 共 3592字 ⁄ 字号 评论关闭

今偶然在论坛上遇到一面试题,虽然简单,但在各种解法中还是有很多值得借鉴的地方。本文目的在于锻炼思维,汲取一些好的思想。总结一下就是,首先根据问题设计数学模型,从而找到合适的算法;在代码书写方面要学会活用:布尔运算的返回值、||,&&逻辑运算、条件表达式、%求余运算、/除法运算等,从而可以使代码更加简洁。(wcdj 2010-3-10)


题目如下:
只允许使用一个循环,先输出1至10内的奇数,然后输出其中的偶数,结果应该是这样的:
1
3
5
7
9
2
4
6
8


来源:http://topic.csdn.net/u/20081114/18/ad521288-2901-4868-8430-77a0e01ae746.html?27095



第一种想法
:利用循环直接先输出奇数再输出偶数。
关键点:用i控制循环次数,用j计算所要求的数字。


第二种想法
:对第一种想法的改进,利用循环直接先输出奇数再输出偶数。
关键点:用i计算所要求的数字,构造一个数学中的函数:
f(x)=2x-1, x<=5
f(x)=2(x-5), x>5

或者:

上述方法更简洁点的方式为:(利用||和&&运算符的“短路原理”)

类似的思路,将遍历范围扩大一倍,即,2N

基于上个方法的改进:

利用数学上的求余运算,消除上述方法的判断:

再补充一种不用判断的方法,纯用算法实现:

类似上述的:

利用布尔运算,也可以不用判断:

还有一种简单的方法,利用条件表达式:

由上联想,将条件表达式和数学函数一起用:


第三种想法
:利用循环分别将奇数和偶数存在数组的相应位置中。
关键点:对数组下标的计算。


第四种想法
:设计一个类,在构造函数中打印奇数,在循环中打印偶数。
关键点:对类的设计。


一些奇特的方法

[1]

原理:
con表示控制台,输入指的是键盘,输出指的是显示器;
当然可以换成别的: 换成 prn 就会输出到打印机;换成 abc.txt 就输出到文件 abc.txt 了。

上述代码修改如下:


[2]





抱歉!评论已关闭.