Fork me on GitHub

Java经典逻辑编程二

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class class_name {
public static void main(String[] args) {
int i, j, k; //分别代表个、十、百位
int num; //用来输出符合要求的三位数
int count = 0; //用来统计符合要求的三位数有多少个
System.out.println("符合要求的三位数有:");
for(i = 1; i <= 4; i++){
for(j = 1; j <= 4; j++){
if(i != j) //提前把有重复的部分情况过滤掉,减少运行次数,优化性能
for(k = 1; k <= 4; k++){
if(i != k && j != k){
num = i + j * 10 + k * 100;
System.out.println(num);
count++;
}
}
}
}
System.out.println("符合要求的三位数共有" + count + "个");
}
}

【程序12】一个整数,它加上100后是一个完全平方数,再加上168又是一个完平方数,请问该数是多少?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class class_name {
public static void main(String[] args)
{
long i, j, k;
for(i = 1; i < 100000; i ++)
{
for(j = 0; j < 1000; j++)
{
if(j * j == i + 100)
{
for(k = j; k < 1000; k++)
{
if(k * k == i + 268)
System.out.println(i);
}
}
}
}
}
}

【程序13】输入年月日,判断这一天是这一年的第几天?

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import java.util.Scanner;
public class dijitian {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("请输入年月日: ");
String string= "(\\d{4})年(0?[1-9]|1[0-2])月((0?[1-9])|((1|2)[0-9])|30|31)日";
String str= in.next();
Pattern pattern = Pattern.compile(string);
Matcher matcher = pattern.matcher(str);
if(matcher.find()) {
int year= Integer.parseInt(matcher.group(1));
int month= Integer.parseInt(matcher.group(2));
int day= Integer.parseInt(matcher.group(3));
if(isLeap(year)&& month== 2) {
if(day> 29) {
System.out.println("您的输入有误!");
return ;
}
}
if(!isLeap(year)&& month== 2) {
if(day> 28) {
System.out.println("您的输入有误!");
return ;
}
}
if(month== 4||month== 6|| month== 5|| month== 9|| month== 11) {
if(day> 30) {
System.out.println("您的输入有误!");
return ;
}
}
int sum = 0;;
switch(month - 1)
{
case 0: sum = 0; break;
case 1: sum = 31; break;
case 2: sum = 59; break;
case 3: sum = 90; break;
case 4: sum = 120; break;
case 5: sum = 151; break;
case 6: sum = 181; break;
case 7: sum = 212; break;
case 8: sum = 243; break;
case 9: sum = 273; break;
case 10: sum = 304; break;
case 11: sum = 334; break;
}
if((month > 2)&&isLeap(year))
System.out.printf("这天是这年第%d天。", sum + day + 1);
else
System.out.printf("这天是这年第%d天。", sum + day);
}else {
System.out.println("您的输入有误!");
return ;
}
}
private static boolean isLeap(int year)
{
if(((year % 100 != 0)&&(year % 4 == 0)) || (year % 400 == 0))
return true;
else
return false;
}
}

【程序14】输入三个整数x,y,z,请把这三个数由小到大输出。

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("请输入三个整数");
System.out.println("请输入第1个整数");
int a = in.nextInt();
System.out.println("请输入第2个整数");
int b = in.nextInt();
System.out.println("请输入第3个整数");
int c = in.nextInt();
System.out.print("从小到大的顺序为:");
if(a < b){
if(b < c){
System.out.printf("%d<%d<%d", a, b, c);
}else{
if(a < c)
System.out.printf("%d<%d<%d", a, c, b);
else
System.out.printf("%d<%d<%d", c, a, b);
}
}else{
if(c < b){
System.out.printf("%d<%d<%d", c, b, a);
}else{
if(c < a)
System.out.printf("%d<%d<%d", b, c, a);
else
System.out.printf("%d<%d<%d", b, a, c);
}
}
}
}

【程序15】排序算法

以下代码只写了一个输出,所以当你要测试哪个排序算法时记得把调用另外三个排序算法的那几行代码注释掉。如果你想同时测试这四个排序算法,可以在每行调用排序方法的后面加入输出语句就行了。

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
public class class_name {
public static void main(String[] args) {
int[] num = {23, 64, 15, 3, 93, 30, 51, 28, 49, 66};
System.out.println("排序前: ");
showArray(num);
System.out.println(); //换行,控制格式
num = BubbleSort(num);
// num = ChoiceSort(num);
// num = InsertSort(num);
// num = QuickSort(num, 0, num.length - 1);
System.out.println("排序后:");
showArray(num);
System.out.println(); //换行,控制格式
}
private static void showArray(int[] num) {
for(int i = 0; i < num.length; i++) {
System.out.print(num[i] + " ");
}
}
private static int[] BubbleSort(int[] num) {
for(int i = 0; i < num.length; i++) {
for(int j = 0; j < num.length - 1; j++) {
if(num[j] > num[j + 1]) {
int temp = num[j];
num[j] = num[j + 1];
num[j +1] = temp;
}
}
}
return num;
}
//插入排序
private static int[] InsertSort(int[] num) {
for(int i = 1; i < num.length; i++) {
int temp = num[i];
for(int j = i; j > 0; j--) {
if(num[j - 1] > temp) {
num[j] = num[j - 1];
num[j - 1] = temp;
}
}
}
return num;
}
//优化后的选择排序
private static int[] ChoiceSort(int[] num) {
for (int i = 0; i < 9; i++) {
int min = i;
int j;
for (j = i + 1; j < num.length; j++) {
if (num[min] > num[j]) {
min = j;
}
}
if (min != i) {
int temp = num[i];
num[i] = num[min];
num[min] = temp;
}
}
return num;
}
/*
//选择排序
private static int[] ChoiceSort(int[] num) {
for(int i = 0; i < num.length - 1; i++) {
for(int j = i + 1; j < num.length; j++) {
if(num[i] > num[j]) {
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
return num;
}
*/
// 快速排序
private static int[] QuickSort(int[] num, int i, int j) {
// TODO Auto-generated method stub
if(i < j) {
int middle = portition(num, i, j);
QuickSort(num, i, middle - 1);
QuickSort(num, middle + 1, j);
}
return num;
}
private static int portition(int[] num, int low, int high) {
int i = low, j = high;
int temp = num[i];
if (low < high) {
while (i < j) {
while ((num[j] >= temp) && (i < j)) {
j--;
}
num[i] = num[j];
while ((num[i] <= temp) && (i < j)) {
i++;
}
num[j] = num[i];
}
num[i] = temp;
}
return i;
}
}

【程序16】输出9*9口诀

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)
{
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= i; j++)
{
int total = 0;
total = i * j;
System.out.printf("%d * %d = %-5d", j, i, total);
}
System.out.println();
}
}
}

【程序17】猴子吃桃问题

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了
一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

1
2
3
4
5
6
7
8
9
10
11
12
13
public class class_name {
public static void main(String[] args) {
int total = 1;
//day = 1的时候,算出来的total其实是第9天有的桃子
//day = 9的时候,算出来的total就是第1天的桃子
for(int day = 1; day < 10; day++){
total = 2 * (total + 1);
}
System.out.println("一开始共有 " + total + " 桃子");
}
}

【程序18】乒乓球比赛名单

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class class_name {
public static void main(String[] args) {
char i, j, k; //i,j,k分别是a,b,c的对手
for(i = 'X'; i <= 'Z'; i++){
for(j = 'X'; j <= 'Z'; j++){
if(i != j){
for(k = 'X'; k < 'Z'; k++){
if(i != k && j != k){
if(i != 'X' && k != 'X' && k != 'Z')
System.out.printf("a -- %c\nb -- %c\nc -- %c", i, j, k);
}
}
}
}
}
}
}

【程序19】打印图案

打印出如下图案(菱形)
程序19

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) {
for(int i = 0; i < 4; i++){ //1到4行
for(int j = 1; j <= (6 - 2 * i) / 2; j++){ //每行前面的空格数
System.out.print(" ");
}
for(int k = 1; k <= 2 * i + 1; k++){
System.out.print("*"); //每行的*号
}
System.out.println(); //换行
}
//下半部分
for(int i = 0; i < 3; i++){
for(int j = 0; j < i + 1; j++){
System.out.print(" ");
}
for(int k = 0; k < 5 - 2 * i; k++){
System.out.print("*");
}
System.out.println();
}
}
}

【程序20】有一分数序列: 2/1,3/2,5/3,8/5,13/8…求这个数列的前20项之和。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class class_name {
public static void main(String[] args) {
float i = 2.0f, j = 1.0f; //i为分子,j为分母
float num = 2.0f; //num是分数,sum是分数的和
float sum = 2.0f;
for(int m = 1; m < 20; m++){ //m = 1时,num已经是第2个加数了,所以m < 20
i = i + j;
j = i - j; //变化前的 i 赋值给 j
num = i / j;
sum += num;
}
System.out.println("前20个分数的和为 " + sum);
}
}
Your support will encourage me to continue to create!