Java经典算法总结—备战面试

1.判断某个数是不是回文数:

设n是一任意自然数,若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如1234321即是回文数。

package cn.edu.hpu;

public class 判断回文数 {
	public static void main(String[] args) {
		huiWen(1234321);
		huiWen(345);
	}
	
	/**
	 * 判断是不是回文数的方法
	 * @param num 要判断的数
	 */
	public static void huiWen(int num) {
		// 先把要判断的数num转换为字符串
		String temp = String.valueOf(num);
		// 然后再把此字符串放到StringBuffer中
		StringBuffer sb = new StringBuffer(temp);
		// reverse()方法用于将字符串反转,判断反转后的字符串和原来的是否相同
		boolean equals = sb.reverse().toString().equals(temp);
		if (equals) {
			System.out.println(num + "是回文数");
		}else {
			System.out.println(num + "不是回文数");
		}
	}
}

2.小球下落问题:

一球从100米高度自由落下,每次落地后反跳回原高度的一半, 再落下。求它在第10次落地时,共经过多少米? 第10次反弹多高?

package cn.edu.hpu;
/*
 * 思路:
 * 1,小球反复弹起,所以要用到循环
 * 2,小球从弹起到落下是一个过程,所以从100米落下的高度应作为初始值
 * 3,小球弹起和落下的路程是相同的,所以一个过程的高度是弹起高度的2倍
 */
public class Demo03 {
	public static void main(String[] args) {
		double height = 100; //下落的高度
		//第10次落地时,共经过的米数,把第一次下落的高度作为初始数
		double total = 100; 
		for (int i = 1; i <= 10; i++) {
			height -= height/2;
			total += height*2; //弹起和下落要经过相同的高度,所以要乘以2
		}
		System.out.println(height);
		System.out.println(total);
	}
}

3.打印三角形问题:

 根据控制台输入行数打印图形,例如输入5显示下面图形

   *********
   *******
    *****
     ***
      *

package cn.edu.hpu;

/*
	思路:
	1,此图形可看做是两个三角形的组合,前面是一个由空格组成的三角形,后面一个是由*组成的
	2,有多行多列,要用for嵌套循环来实现,外层控制行数,内层控制每行的个数
	3,通过二元一次方程组,算出行号i和每行*数k之间的关系:k = -2*i+11
	
 */
public class Demo04 {
	public static void main(String[] args) {
		
		 for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= i-1; j++) {
				System.out.print(" "); //打印前面的空格
			}
			for (int k = 1; k <= -2*i+11 ; k++) {
				System.out.print("*"); //打印后面的*
			}
			System.out.println(); //换行
		}
	}
}

4.判断某个数是不是完数(完全数):

如果一个数恰好等于它的因子之和,则称该数为"完全数"。因子就是所有可以整除这个数的数,不包括这个数自身.例如6=1+2+3。

编程找出1000以内的所有完数。

package cn.edu.hpu;

/*
 * 思路:
 * 1,需要使用for嵌套循环,外层循环控制范围
 * 2,内层循环找出某个数的所有因子(因子不包括这个数本身)
 */
public class Demo09 {
	public static void main(String[] args) {
		
		for (int i = 1; i <= 1000; i++) {
			int sum = 0; //因子之和
			for (int j = 1; j < i; j++) {				
				if (i % j == 0) {
					sum += j;					
				}
			}
			if (sum == i) {
				System.out.println(i);
			}
		}
	}
}

5.白钱百鸡问题:

今有百钱,要买百鸡,百钱买百鸡, 公鸡一只5钱,母鸡一只3钱,小鸡1钱3只.

问:公鸡,母鸡,小鸡各买多少只?

package cn.hput;

public class test {
	public static void main(String[] args) {
		
		/*
		 * 思路:
		 * 1,全部买公鸡,最多买20只;全部买母鸡,最多买33只;全部买小鸡,最多买300只。
		 * 2,使用for嵌套循环
		 */
		for (int i = 0; i <= 20; i++) {
			for (int j = 0; j <= 33; j++) {
				for (int k = 0; k <= 300; k++) {
					if (i + j + k == 100 && 5 * i + 3 * j + 1 / 3 == 100
							&& k % 3 == 0) {
						System.out.println("可买公鸡" + i + "只;母鸡" + j + "只;小鸡" + k
								+ "只");
					}
				}
			}
		}
	}
}


你可能感兴趣的:(java)