Fork me on GitHub

Java经典逻辑编程一

【程序1】兔子总数问题

有一对兔子,从出生后第3个月起 每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Scanner;
public class tuzi {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("你想知道第几个月的兔子的数量");
int month = in.nextInt(); //使用输入流对象,调用nextInt()方法输入一个整数到month中
int[] mon = new int[month];
int counts= 0;
if(month < 3){
System.out.println("第" + month + "个月有 1 对兔子,共 2 只");
}else {
for(int i = 2; i < month; i++){
mon[0] = mon[1] = 1;
counts= mon[i] = mon[i - 1] + mon[i - 2];
}
System.out.printf("第 %d 个月有 %d 对兔子,共 %d 只兔子\n", i + 1, mon[i], 2 * counts);
}
}
}

【程序2】判断两数之间素数个数

判断101-200之间有多少个素数,并输出所有素数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class class_name {
public static void main(String[] args) {
System.out.print("101--200中的素数有:");
for(int i = 101; i <= 200; i++){
if(isPrime(i))
System.out.print(" " + i);
}
}
//isPrime方法用来判断一个数是否是素数
private static boolean isPrime(int i) {
// TODO Auto-generated method stub
for(int j = 2; j <= Math.sqrt(i); j++){
if(i % j == 0)
return false;
}
return true;
}
}

【程序3】打印”水仙花数”

所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如: 153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class class_name {
public static void main(String[] args) {
System.out.print("水仙花数有:");
for(int num = 100; num < 1000; num++){
if(isNarcissisticNum(num))
System.out.println(" " + num);
}
}
//一个判断正整数是否为水仙花数的方法
private static boolean isNarcissisticNum(int num) {
// TODO Auto-generated method stub
int a = num / 100; //分离出百位 a
int b = (num / 10) % 10; //分离出十位 b
int c = num % 10; //分离出个位 c
int sum = a * a * a + b * b * b + c * c * c;
if(sum == num)
return true;
else
return false;
}
}

【程序4】正整数分解质因数

将一个正整数分解质因数。例如: 输入90,打印出90=2*3*3*5
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n>k,但n能被k整除,则打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.util.Scanner;
public class class_name {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个大于 3 的正整数");
int num = input.nextInt();
System.out.print(num + "的素因数:");
factor(num);
}
private static void factor(int num) {
// TODO Auto-generated method stub
for(int i = 2; i <= Math.sqrt(num); i++){
if(num % i == 0){
System.out.print(i + " * ");
if(isPrime(num / i)){
System.out.println(num / i);
}
else
factor(num / i);
break;
}
}
}
private static boolean isPrime(int i) {
// TODO Auto-generated method stub
for(int j = 2; j <= Math.sqrt(i); j++){
if(i % j == 0)
return false;
}
return true;
}
}

【程序5】条件运算符的嵌套

利用条件运算符的嵌套来完成此题: 学习成绩>=90分的同学用A表示,60-89分之间用B表示,60分以下的用C表示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
public class class_name {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入你的分数");
int score = in.nextInt();
if(score >= 90){
System.out.println("A 恭喜");
}
else if(score >= 60){
System.out.println("B 不错");
}
else{
System.out.println("C 加油");
}
}
}

【程序6】最大公约数和最小公倍数

输入两个正整数m和n,求其最大公约数和最小公倍数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.Scanner;
public class class_name {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入第一个数");
int a = in.nextInt();
System.out.println("请输入第二个数");
int b = in.nextInt();
System.out.println("这两个数的最大公约数是 " + MaxCommonDivisor(a, b));
System.out.println("这两个数的最小公倍数是 " + MinCommonMultiple(a, b));
}
private static int MaxCommonDivisor(int a, int b) {
// TODO Auto-generated method stub
if(a < b){
int temp = a;
a = b;
b = temp;
}
while(a % b != 0){
int temp = a % b;
a = b;
b = temp;
}
return b;
}
private static int MinCommonMultiple(int a, int b) {
// TODO Auto-generated method stub
return a * b / MaxCommonDivisor(a, b);
}
}

【程序7】统计英文字母、空格、数字和其它字符个数

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Scanner;
public class class_name {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Input one sentance.");
String s = in.nextLine();
int letter = 0, symbol = 0, space = 0, number = 0;
char[] strArray = s.toCharArray();
for (int i = 0; i < strArray.length; i++)
{
char c = strArray[i];
if(('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))
letter++;
else if(48 <= c && c <= 57) //注意!数字0-9的ASCII码是48-57
number++;
else if(c == ' ')
space++;
else
symbol++;
}
System.out.println("This sentance have " + letter + " letters, ");
System.out.println("have "+ number + " numbers, ");
System.out.println("have " + space + " spaces, " + "and " + symbol + " symbols.");
}
}

【程序8】求s=a+aa+aaa+aaaa+…的值

求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222(此时共有4个数相加),几个数相加有键盘控制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
public class class_name {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入相加的基数");
int n = input.nextInt();
System.out.println("请输入要相加的个数");
int i = input.nextInt();
long total = 0L;
long temp = n;
for(int j = 0; j < i; j++){
total += temp;
temp = temp * 10 + n;
}
System.out.println("和为" + total);
}
}

【程序9】完数

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class class_name {
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+= j;
}
}
if (sum== i) {
System.out.println(i);
}
}
}
}

【程序10】球落地

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.Scanner;
public class class_name {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("请输入原始高度。");
double s = in.nextDouble();
System.out.println("要求第几次落地后的距离。");
int n = in.nextInt();
double total = s;
System.out.printf("第%d次落地后共走的距离是:" , n);
if(n == 1)
{
System.out.println(total);
System.out.printf("第%d次反弹的距离是%f。", n, s / 2);
}
else
{
for(int i = 1; i < n; i++)
{
s = s / 2;
total += 2 * s; //一上一下共两倍的弹跳距离
}
System.out.print(total);
System.out.println();
System.out.printf("第%d次反弹的距离是%f。", n, s / 2);
}
}
}

【程序11】使用IO流将C盘图片复制到D盘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.io.*;
public class long1_1 {
public static void main(String[] args) {
File pic1 = new File("C:/A.jpg");
File pic2 = new File("E:/A1.jpg");
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
fis = new FileInputStream(pic1);
fos = new FileOutputStream(pic2);
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
byte[] b = new byte[1024];
while (bis.read(b) != -1) {
bos.write(b);
}
bos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("找不到文件");
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件读取错误");
} finally {
try {
if (bos != null) {
bos.close();
}
if (bis != null) {
bis.close();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("关闭流出错");
}
}
System.out.println("复制成功");
}
}
Your support will encourage me to continue to create!