其他算法3

1.

/*
	 * 题目:打印出如下图案(菱形)
	 */
	//     *
	//     ***
	//    *****
	//   *******
	//    *****
	//     ***
	//     *
	/*
	 * 序列为 1,3,5,7,5,3,1
	 */
	public static void print22() {
		int start = 1;
		int end = 7;
		int count = 2;
		while (start > 0) {
			for (int i = 0; i < (end - start) / 2; i++) {
				System.out.print(" ");
			}
			for (int i = 0; i < start; i++) {
				System.out.print("*");
			}
			start += count;
			if (start >= end) {
				count = -count;
			}
			System.out.println();
		}
	}

 输出:

   *

  ***

 *****

*******

 *****

  ***

   *

 

 2.

/*
	 * 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 (这里不用递归求)
	 */
	public static void print23() {
		int count = 20;
		double total = 0;
		int pre = 1;
		int now = 2;
		for (int i = 0; i < count; i++) {
			System.out.print(now + "/" + pre);
			if (i < (count - 1)) {
				System.out.print(" + ");
			}
			total += now * 1.0 / pre;
			int temp = pre + now;
			pre = now;
			now = temp;
		}
		System.out.println("=" + total);
	}

	public static void main(String[] args) {
		T2.print23();
	}

 输出:

2/1 + 3/2 + 5/3 + 8/5 + 13/8 + 21/13 + 34/21 + 55/34 + 89/55 + 144/89 + 233/144 + 377/233 + 610/377 + 987/610 + 1597/987 + 2584/1597 + 4181/2584 + 6765/4181 + 10946/6765 + 17711/10946=32.66026079864164

 

 3.

/*
	 * 题目:求1+2!+3!+...+20!的和
	 */
	public static void print24() {
		int count = 20;
		long total = 0;
		String str = "";
		for (int i = 1; i <= count; i++) {
			long temp = 1;
			for (int j = 1; j <= i; j++) {
				temp *= j;
			}
			System.out.println(i + "!=" + temp);
			str += i + "!";
			if (i < count) {
				str += " + ";
			} else {
				str += " = ";
			}
			total += temp;
		}
		System.out.println(str + total);
	}

	/*
	 * 题目:求1+2!+3!+...+20!的和
	 */
	public static void print25() {
		int count = 20;
		long total = 0;
		long temp = 1;
		String str = "";
		for (int i = 1; i <= count; i++) {
			temp *= i;
			total += temp;
			System.out.println(i + "!=" + temp);
			str += i + "!";
			if (i < count) {
				str += " + ";
			} else {
				str += " = ";
			}
		}
		System.out.println(str + total);
	}

	public static void main(String[] args) {
		T2.print24();
		T2.print25();
	}

 输出:

1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=40320
9!=362880
10!=3628800
11!=39916800
12!=479001600
13!=6227020800
14!=87178291200
15!=1307674368000
16!=20922789888000
17!=355687428096000
18!=6402373705728000
19!=121645100408832000
20!=2432902008176640000
1! + 2! + 3! + 4! + 5! + 6! + 7! + 8! + 9! + 10! + 11! + 12! + 13! + 14! + 15! + 16! + 17! + 18! + 19! + 20! = 2561327494111820313
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=40320
9!=362880
10!=3628800
11!=39916800
12!=479001600
13!=6227020800
14!=87178291200
15!=1307674368000
16!=20922789888000
17!=355687428096000
18!=6402373705728000
19!=121645100408832000
20!=2432902008176640000
1! + 2! + 3! + 4! + 5! + 6! + 7! + 8! + 9! + 10! + 11! + 12! + 13! + 14! + 15! + 16! + 17! + 18! + 19! + 20! = 2561327494111820313

 

 4.

/*
	 * 题目:利用递归方法求5!。
	 */
	public static int print26(int n) {
		if (n == 1) {
			return 1;
		} else {
			return print26(n - 1) * n;
		}
	}

	public static void main(String[] args) {
		System.out.println(T2.print26(5));
	}

 输出:

120

 

5.

/*
	 * 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,
	 * 说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?(也可以用递归实现)
	 */
	public static void print27() {
		int count = 5;
		int start = 10;
		for (int i = 1; i < count; i++) {
			start += 2;
		}
		System.out.println(start);
	}

	public static void main(String[] args) {
		T2.print27();
	}

 

输出:

18

 

 6.

/*
	 * 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
	 */
	public static void print28(int n) {
		int length = 0;
		if (n >= 10000) {
			length = 5;
		} else if (n >= 1000) {
			length = 4;
		} else if (n >= 100) {
			length = 3;
		} else if (n >= 10) {
			length = 2;
		} else {
			length = 1;
		}
		System.out.print(n + "是" + length + "位数,逆序输出为:");
		String temp = "";
		for (int i = 0; i < length; i++) {
			temp += n % 10;
			n = n / 10;
		}
		System.out.println(Integer.valueOf(temp));
	}

	/*
	 * 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
	 */
	public static void print29(int n) {
		String str = String.valueOf(n);
		System.out.print(n + "是" + str.length() + "位数,逆序输出为:");
		String temp = "";
		for (int i = str.length() - 1; i >= 0; i--) {
			temp+=str.charAt(i);
		}
		System.out.println(Integer.valueOf(temp));
	}

	public static void main(String[] args) {
		T2.print28(10100);
		T2.print29(12345);
	}

 输出:

10100是5位数,逆序输出为:101
12345是5位数,逆序输出为:54321

 

7.

/*
	 * 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
	 */
	public static void print30(int num) {
		int n = num;
		if (n >= 10000 && n < 100000) {
			if (n / 10000 == n % 10) {
				n = n / 10 % 1000;
				if (n / 100 == n % 10) {
					System.out.println(num + "是回文数");
					return;
				}
			}
			System.out.println(num + "不是回文数");
		}
	}

	/*
	 * 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 (任意一个数都可以判断)
	 */
	public static void print31(int n) {
		String str = String.valueOf(n);
		if (new StringBuffer(str).reverse().toString().equals(str)) {
			System.out.println(n + "是回文数");
			return;
		}
		System.out.println(n + "不是回文数");
	}

	public static void main(String[] args) {
		T2.print30(10100);
		T2.print30(12345);
		T2.print30(12321);
		T2.print30(15851);
		T2.print30(15861);
		System.out.println("--------------------");
		T2.print31(10100);
		T2.print31(12345);
		T2.print31(12321);
		T2.print31(15851);
		T2.print31(15861);
	}

 输出:

10100不是回文数
12345不是回文数
12321是回文数
15851是回文数
15861不是回文数
--------------------
10100不是回文数
12345不是回文数
12321是回文数
15851是回文数
15861不是回文数

 

8.

/*
	 * 使用Java语言编写代码,将一个正整数分解质因数,例如:输入90,打印输出90=2*3*3*5
	 */
	public static void print43(int n) {
		System.out.print(n);
		if (n > 0) {
			String str = "";
			for (int i = 2; i <= n; i++) {
				if (n % i == 0) {
					str += i;
					n = n / i;
					i--;
					if (n != 1) {
						str += "*";
					}
				}
			}
			System.out.println("=" + str);
		}
	}

	public static void main(String[] args) {
		T2.print43(90);
		T2.print43(9);
		T2.print43(7);
		T2.print43(100);
	}

输出:

90=2*3*3*5
9=3*3
7=7
100=2*2*5*5

 

9.

/*
	 * 求出所有“水仙花数”,水仙花数是指一个 3位数,它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
	 */
	public static void print44() {
		for (int i = 100; i < 1000; i++) {
			int n = i;
			int total = 0;
			while (n > 0) {
				int k = n % 10;
				total += k * k * k;
				n = n / 10;
			}
			if (total == i) {
				System.out.println(i);
			}
		}
	}

	public static void main(String[] args) {
		T2.print44();
	}

 输出:

153
370
371
407

 

你可能感兴趣的:(算法)