首页 > 代码库 > Java经典习题(2)

Java经典习题(2)

6.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

程序分析:从控制台获取一行输入,然后对String字符串的内容进行判断,统计每种字符的个数,直到遇到回车“\n”为止。

import java.util.Scanner;

public class Question6 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		String str = sc.nextLine();

		char[] dst = new char[str.length()];

		str.getChars(0, str.length(), dst, 0);

		int letterCount = 0; //记录字母出现的个数
		int whiteSpaceCount = 0; //记录空格出现的个数
		int numberCount = 0; //记录数字出现的个数
		int otherCount = 0; //记录其他字符出现的个数

		for (char c : dst) {
			if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
				letterCount++;
			} else if (c == ' ') {
				whiteSpaceCount++;
			} else if (c >= '0' && c <= '9') {
				numberCount++;
			} else {
				otherCount++;
			}
		}

		System.out.println("字母个数是:" + letterCount);
		System.out.println("空格个数是:" + whiteSpaceCount);
		System.out.println("数字个数是:" + numberCount);
		System.out.println("其它字符个数是:" + otherCount);
	}

}


7.求s=a+aa+aaa+aaaa+aa...aa的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),a的值和几个数相加均由键盘输入。

程序分析:程序的关键是要计算出每个aa...aa的值的大小,每个值的大小等于每个位上的数值之和。

import java.util.Scanner;

public class Question7 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		System.out.println("请输入a的值:");

		long a = sc.nextLong();

		System.out.println("请输入相加数的个数:");

		long b = sc.nextLong();

		long s = 0;

		for (long i = 1; i <= b; i++) {
			long temp = a;
			long w = 1; // w记录权
			for (long j = i; j > 1; j--) {
				w = w * 10;
				temp = temp + (a * w);
			}

			s = s + temp; // temp记录每个“+”号分隔开的数的值
		}

		System.out.print("s=");

		for (long i = 1; i <= b; i++) {
			System.out.print(a);
			for (long j = i; j > 1; j--) {
				System.out.print(a);
			}

			if (i != b) {
				System.out.print("+");
			}
		}

		System.out.println("=" + s);
	}

}

8.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,编程找出1000以内的所有完数。

程序分析:只需找出数n所有的因子(即能被n整除的数),把所有的因子之和与n进行比较即可。

public class Question8 {

	public static void main(String[] args) {

		for (int i = 1; i < 1000; i++) {
			if (isPerfectNumber(i)) {
				System.out.println(i);
			}
		}

	}
	
	/**
	 * 判断一个数是否是“完数”
	 * @param n
	 * @return 返回true,表示数n是“完数”;返回false,表示数n不是“完数”
	 */
	private static boolean isPerfectNumber(int n) {
		int sum = 0; //记录数n所有因子相加之和

		for (int i = 1; i < n; i++) {
			if (n % i == 0) {
				sum += i;
			}
		}

		if (sum == n) {
			return true;
		} else {
			return false;
		}
	}
}

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

程序分析:将落地弹起这一过程看作是一个回合,用循环计算累加到第n次落地弹起时将弹起部分的距离减掉即可得到所经过的距离。

import java.util.Scanner;

public class Question9 {

	public static void main(String[] args) {

		System.out.println("请输入反弹次数:");

		Scanner sc = new Scanner(System.in);

		int m = sc.nextInt();
		
		double height = 100.0;
		double sum = 0.0;
		double reHeight = 0.0;

		for (int i = 1; i <= m; i++) {
			reHeight = height / 2;
			sum = sum + height + reHeight;
			height = reHeight;

			if (i == m) {
				sum -= height;
			}

		}

		System.out.println("第" + m + "次落地共经过的米数:" + sum);
		System.out.println("第" + m + "次落地后反弹的高度::" + reHeight);

	}

}

10.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

程序分析:用三层循环,判断百位和十位是不相等的,百位和个位是不相等的,十位和个位是不相等的,即满足条件。

public class Question10 {

	public static void main(String[] args) {
		int count = 0;
		for (int i = 1; i <= 4; i++) {
			for (int j = 1; j <= 4; j++) {
				for (int k = 1; k <= 4; k++) {
					if (i != j && i != k && j != k) {
						System.out.println(i + "" + j + "" + k);
						count++;
					}
				}
			}
		}

		System.out.println("共有" + count + "个数");
	}
}