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);
}
}
程序分析:程序的关键是要计算出每个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 + "个数");
}
}