Java 经典算法(二)
【程序08】题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程找出1000以内的所有完数。
public class Java08 {
public static void main(String[] args) {
System.out.println("1000以内的完数如下:");
for (int i = 1; i <= 1000; i++) {
int sum = 0;
for (int j = 1; j <i; j++)
if (i % j == 0)
sum = sum + j;
if (sum == i)
System.out.print(i+" ");
}
}
}
运行结果
1000以内的完数如下:
6 28 496
6 28 496
【程序09】题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
public class Java09 {
public static void main(String[] args) {
for (int n = 100; n <= 999; n++) {
int i = n / 100; // 得到百位数
int j = n / 10 % 10; // 得到十位数
int k = n % 10; // 得到个位数
if (n == (i * i * i + j * j * j + k * k * k)) {
System.out.println(n);
}
}
}
}
153
370
371
407
370
371
407
【程序10】题目:将一个数组逆序输出。
public class Java10 {
public static void main(String[] args) {
int [] s={1,2,3};
for(int i=s.length-1;i>=0;i--){
System.out.println(s[i]);
}
}
}
【程序11】题目:对10个数进行排序
import java.util.Arrays;
import java.util.Scanner;
public class Java11 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入10个数:");
int in[] = new int[10];
for (int i = 0; i < 10; i++) {
in[i] = sc.nextInt();
}
System.out.print("排序前:");
for (int i = 0; i < in.length; i++) {
System.out.print(in[i] + " ");
}
Arrays.sort(in);
System.out.println();
System.out.print("排序后,升序:");
for (int i = 0; i < in.length; i++) {
System.out.print(in[i] + " ");
}
System.out.println();
System.out.print("排序后,降序:");
for (int i = in.length - 1; i >= 0; i--) {
System.out.print(in[i] + " ");
}
}
}
输入示例
【程序12】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
public class Java12 {
public static void main(String[] args) {
double sum = 0;
double mid = 100;
for(int i=1;i<=10;i++){
sum += mid;
mid =mid/2;
}
System.out.println("它在第10次落地时,共经过"+sum+"米,第10次反弹高为"+mid+"米。");
}
}
输出
它在第10次落地时,共经过199.8046875米,第10次反弹高为0.09765625米。
【程序13】题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
import java.util.Scanner;
public class Java13 {
public static void main(String[] args) {
System.out.println("请输入某个学生的成绩");
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
int in = sc.nextInt();
String res = null;
res = in >= 90 ? "A" : (in >= 60 ? "B" : "C");
System.out.println("学生成绩等级:" + res);
}
}
}
输入示例:
【程序14】题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
import java.util.Scanner;
public class Java14 {
public static void main(String[] args) {
System.out.println("输入一个数字:");
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
int in = sc.nextInt();
boolean res = solution(in);
if (res) {
System.out.println(in + "是回文数。");
} else {
System.out.println(in + "不是回文数。");
}
}
}
public static boolean solution(int x) {
String str = String.valueOf(x);
StringBuffer stringBuffer = new StringBuffer(str);
String rs = stringBuffer.reverse().toString();
if (rs.equals(str)) {
return true;
}
return false;
}
}
输入示例: