java实现一些小算法

学习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();
	}
}


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值