日常小练习

寻找完数

1
2
一个数如果恰好等于它的因子之和, 这个数就称为” ” 完数” ”。
例如 6 = 1+2+3 。 编程找出1000 以内的所有完数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void main(String[] args) {
for(int i = 2;i<1000;i++){
int s= 0;
for(int j =1;j<i;j++){
if(i%j == 0){
s+=j;
}
}
if(s==i){
System.out.print(i+"是完数--");
for(int a=1; a<i;a++){
if(i%a == 0){
System.out.print(a);
System.out.print(" ");
}

}
System.out.println();
}
}

}
1
快速排序O(nlogn)
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
public static void quickSort(int[] arr,int low, int high){
int temp, t,i,j;
if(low>high){
return;
}
temp = arr[low];
i = low;
j = high;
while (i < j) {
while(temp<= arr[j] && i<j){
j -- ;
}
while(temp>= arr[i] && i<j){
i ++ ;
}
if(i<j){
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
arr[low] =arr[i];
arr[i] = temp;

quickSort(arr,low,j-1);

quickSort(arr,j+1,high);
}
1
冒泡排序(优化)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void mpSort(int[] arr) {
int temp = 0;
int len = arr.length -1;
int lastTemp = 0; // 记录最后一次交换的位置
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = true; //标志位
for (int j = 0; j < len; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
flag = false;
lastTemp = j;
}
}
len = lastTemp;
if (flag) {
return; //没有发生交换说明已经排好序
}
}
}
1
杨辉三角
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
public static void main(String[] args) {
int num = 10;
int a[][] = new int[num][num];
//让每一行的第一个数字为1
for (int i = 0; i < num; i++) {
a[i][0] = 1;
}
//将第一行的其它数字变为0
for (int i = 0; i < num - 1; i++) {
a[0][i + 1] = 0;
}
//计算除第一个数字外的其他的数字
for (int i = 1; i < num; i++) {
for (int j = 1; j <= i; j++) {
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
}
}
//打印图样
for (int i = 0; i < num; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(" " + a[i][j]);
}
System.out.println();
}
}
查看评论