Java学习-练习

1.计算阶乘

 1 import java.util.Scanner;
 2 public class test {
 3     public static void main(String[] args) {
 4         Scanner s=new Scanner(System.in);
 5         System.out.println("计算阶乘:");
 6         int res=s.nextInt();
 7         int i=res-1;
 8         while(i>0)
 9         {
10             res=res*(i--);
11         }
12         System.out.println("结果是:"+res);
13     }
14 }

2.寻找某两个数相除,其结果 离黄金分割点 0.618最近
分母和分子不能同时为偶数
分母和分子 取值范围在[1-20]

 1 public class test
 2 {
 3     public static void main(String[] args) {
 4         int i,j,x,y;
 5         double min=9999;
 6         double tmp=0;
 7         x=y=0;
 8         for(i=1;i<=20;i++)
 9         {
10             for(j=1;j<=20;j++)
11             {
12                 if(i%2==0 && j%2==0)
13                     continue;
14                 tmp=(double)i/j-0.618;//这里的强制转换double是个坑,不转换就会得出错误的结果
15                 if(tmp<0)
16                 {
17                     tmp=tmp*(-1.0);
18                 }
19                 if( tmp<min)//当发现有更小的差值时,更新min和x,y
20                 {
21                     x=i;
22                     y=j;
23                     min=tmp;
24                 }
25             }
26         }
27         System.out.println("这两个数是"+x+"/"+y+"="+(double)x/y);
28     }
29 }

3.水仙花数定义:
1. 一定是3位数
2. 每一位的立方,加起来恰好是这个数本身,比如153=1*1*1+5*5*5+3*3*3
寻找所有的水仙花数

 1         int i,j,k;
 2         for(int n=100;n<=999;n++)
 3         {
 4             k=n%10;//个位
 5             j=n/10%10;//十位
 6             i=n/100;//百位
 7             if(i*i*i+j*j*j+k*k*k==n)
 8             {
 9                 System.out.println(n);
10             }
11         }

 4.由小到大,由大到小排序。(冒泡排序)

 1 public class test
 2 {
 3      static void selectSort(int a[])
 4     {
 5         int i,j,min,tmp;
 6         for(i=0;i<a.length;i++)
 7         {
 8             min=i;
 9             for(j=i+1;j<a.length;j++)
10             {
11                 if(a[j]<a[min])
12                     min=j;
13             }
14             tmp=a[i];
15             a[i]=a[min];
16             a[min]=tmp;
17         }
18     }
19      static void bubbleSort1(int a[])//由小到大排序
20      {
21          int i,j,tmp;
22          for(i=a.length-1;i>=1;i--)
23          {
24              for(j=0;j+1<=i;j++)
25              {
26                  if(a[j]>a[j+1])
27                  {
28                      tmp=a[j];
29                      a[j]=a[j+1];
30                      a[j+1]=tmp;
31                  }
32              }
33          }
34      }
35      static void bubbleSort2(int a[])//由大到小排序
36      {
37          int i,j,tmp;
38          for(i=0;i<a.length-1;i++)
39          {
40              for(j=a.length-1;j-1>=i;j--)
41              {
42                  if(a[j-1]<a[j])
43                  {
44                      tmp=a[j-1];
45                      a[j-1]=a[j];
46                      a[j]=tmp;
47                  }
48              }
49          }
50      }
51      static void print(int a[])
52     {
53         for(int i=0;i<a.length;i++)
54         {
55             System.out.println(a[i]);
56         }
57     }
58     public static void main(String[] args) {
59         int a[]=new int[5];
60         for(int i=0;i<5;i++)
61         {
62             a[i]=(int)(Math.random()*100);
63         }
64 //        selectSort(a);
65         //先由小到大排序,再由大到小排序
66         bubbleSort1(a);
67         print(a);
68         bubbleSort2(a);
69         System.out.println("........我是分割线.......");
70         print(a);
71 
72     }
73 }

 5.生成随机的5*5二维数组,找出最大值并打印行列坐标

 1 static void print2(int a[][])
 2 {
 3     int i,j;
 4     for(i=0;i<a.length;i++)//此乃最大行数
 5     {
 6         for(j=0;j<a[0].length;j++)//此乃最大列数
 7             if(j==a[0].length-1){//排版好看
 8                 System.out.print(a[i][j]);
 9                 System.out.print("\n");
10             }
11             else
12             {
13                 System.out.print(a[i][j]+"\t");
14             }
15     }
16 }
17     public static void main(String[] args) {
18         int a[][]=new int[5][5];
19         int i,j;
20         for(i=0;i<5;i++)
21         {
22             for(j=0;j<5;j++)
23             {
24                 a[i][j]=(int)(Math.random()*100);
25             }
26         }
27         int max=0;
28         int x,y;
29         x=y=0;
30         for(i=0;i<5;i++)
31         {
32             for(j=0;j<5;j++)
33             {
34                 if(a[i][j]>max)
35                 {
36                     max=a[i][j];
37                     x=i;
38                     y=j;
39                 }
40             }
41         }
42         print2(a);
43         System.out.println("最大值是:"+max);
44         System.out.println("坐标是:"+x+","+y);
45     }
46 }

 6.首先定义一个5X8的二维数组,然后使用随机数填充满。
借助Arrays的方法对二维数组进行排序。
参考思路:
先把二维数组复制到一个一维数组
然后使用sort进行排序
最后再复制回到二维数组

 1 static void print2(int a[][])//打印二维数组
 2 {
 3     int i,j;
 4     for(i=0;i<a.length;i++)
 5     {
 6         for(j=0;j<a[0].length;j++)
 7             if(j==a[0].length-1){
 8                 System.out.print(a[i][j]);
 9                 System.out.print("\n");
10             }
11             else
12             {
13                 System.out.print(a[i][j]+"\t");
14             }
15     }
16 }
17     public static void main(String[] args) {
18         int a[][]=new int[5][8];
19         for(int i=0;i<a.length;i++)
20         {
21             for(int j=0;j<a[0].length;j++)
22             {
23                 a[i][j]=(int)(Math.random()*100);
24             }
25         }
26         print2(a);
27         int b[]=new int[40];
28         int k=0;
29         while(k<b.length)
30         {
31             for(int i=0;i<a.length;i++)
32             {
33                 System.arraycopy(a[i], 0, b, k, a[0].length);
34                 k=k+a[0].length;
35             }
36         }
37         Arrays.sort(b);
38         System.out.println("............我是分割线.............");
39         k=0;
40         while(k<b.length)
41         {
42             for(int i=0;i<a.length;i++)
43             {
44 //                for(int j=0;j<a[0].length;j++)
45 //                {
46 //                    a[i][j]=b[k++];
47 //                }
48                 System.arraycopy(b, k, a[i], 0, a[0].length);
49                 k=k+a[0].length;
50             }
51         }
52         print2(a);
53     }
54 }

猜你喜欢

转载自www.cnblogs.com/gilgamesh-hjb/p/12108742.html