学习java时遇到的一些算法题,在这里进行总结。
1、斐波那契数列(Fibonacci)
斐波那契数列是由数字1、1、2、3、5、8、13、21等等组成,从第三个数字起,每一个数字都是前两个数字的和。编写程序,给入参数N即显示N个斐波那契数列。
思路:运用java递归的思想,获取每一位斐波那契数列的值,最后整合成字符串进行输出。
public class Fibonacci {
int num;
String strshow = "";
public Fibonacci(int n) {
this.num = n;
}
public int getNum(int i) {
int r = 0;
if (i == 1) {
return 1;
}
if (i == 2) {
return 1;
}
if (i > 2) {
return getNum(i - 1) + getNum(i - 2);
}
return r;
}
public void showFibonacci() {
StringBuffer showstr = new StringBuffer("");
for (int i = 0; i < num; i++) {
showstr.append(getNum(i + 1));
if (i > 0 && i != num - 1 || i == 0 && num > 1) {
showstr.append(",");
}
}
System.out.println(showstr.toString());
}
public static void main(String args[]) {
Fibonacci f = new Fibonacci(10);
f.showFibonacci();
}
}
运行后结果:1,1,2,3,5,8,13,21,34,55
2、吸血鬼数字
吸血鬼数字是指位数为偶数的数字,可由一对数字相乘而得到,这对数字各包含乘积的一半位数的数字,已2个0结尾的数字不被允许。
例如下列数字都是吸血鬼数字:
21 * 60 == 1260
21 * 87 == 1827
27 * 81 == 2187
编写程序找出所以的吸血鬼数字。
思路:采用枚举的方法找到所有的数字。
示例代码:
public class VampireNumber {
int i, j, k;
void run() {
for (int i = 10; i < 99; i++) {
for (int j = 10; j < 99; j++) {
if (i <= j) {
k = i * j;
if ((k % 10 == 0) && (k / 10 % 10 == 0)) {
continue;
}
List kl = new ArrayList();
kl.add(k / 1000);
kl.add(k / 100 % 10);
kl.add(k / 10 % 10);
kl.add(k % 10);
if (kl.contains(i / 10)) {
kl.remove((Object) (i / 10));
}
if (kl.contains(i % 10)) {
kl.remove((Object) (i % 10));
}
if (kl.contains(j / 10)) {
kl.remove((Object) (j / 10));
}
if (kl.contains(j % 10)) {
kl.remove((Object) (j % 10));
}
if (kl.size() == 0) {
System.out.println(i + " * " + j + " == " + k);
}
}
}
}
}
public static void main(String args[]) {
VampireNumber v = new VampireNumber();
v.run();
}
}