java基础编程题

java基础编程题

1、打印出如下图案

 1 public class Prog1{
 2     public static void main(String[] args){
 3         int n = 5;
 4         printStar(n);
 5         }
 6     
 7     //打印星星
 8     private static void printStar(int n){
 9         //打印上半部分
10         for(int i=0;i<n;i++){
11             for(int j=0;j<2*n;j++){
12                 if(j<n-i)
13                     System.out.print(" ");
14                 if(j>=n-i && j<=n+i)
15                     System.out.print("*");
16                 }
17             System.out.println();
18             }
19         //打印下半部分
20         for(int i=1;i<n;i++){
21             System.out.print(" ");
22             for(int j=0;j<2*n-i;j++){
23                 if(j<i)
24                     System.out.print(" ");
25                 if(j>=i && j<2*n-i-1)
26                     System.out.print("*");
27                 }
28             System.out.println();
29             }
30         }
31     }
Prog1

解题思路:先把图形分成两部分来看待,前五行一个规律,后四行一个规律,利用双重 for循环,第一层控制行,第二层控制列。重要的是找准规律!

2、题目:求1+2!+3!+...+20!的和

 1 public class Prog2{
 2     public static void main(String[] args){
 3         long sum = 0;
 4         for(int i=0;i<20;i++) {
 5             sum += factorial(i+1);
 6         }
 7         System.out.println(sum);
 8         }
 9     //阶乘
10     private static long factorial(int n){
11         int mult = 1;
12         for(int i=1;i<n+1;i++)
13             mult *= i;
14         return mult;
15         }
16     }
Prog2

 程序分析:将阶乘另设置一个函数避免错误!

3、题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

 1 import java.util.Scanner;
 2 
 3 public class Prog22{
 4     public static void main(String[] args){
 5         Scanner in = new Scanner(System.in);
 6         int n = in.nextInt();
 7         int i = 0;
 8         int[] a = new int[5];//数组,便于日后存取各数字
 9         do{
10             a[i] = n%10;//得到n的个位
11             n /= 10;//得到没有个位的n
12             ++i;
13             }while(n!=0);
14         System.out.print("这是一个"+i+"位数,从个位起,各位数字依次为:");
15         for(int j=0;j<i;j++)
16             System.out.print(a[j]+" ");
17         }
18     }
Prog3

 4、题目:对10个数进行排序

 1 import java.util.Scanner;
 2 
 3 public class Prog4 {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         Scanner in = new Scanner(System.in);
 8         int n = in.nextInt();
 9         int a[] = new int[n];
10         for(int i=0;i<n;i++) {
11             a[i] = in.nextInt();
12         }
13         
14         for(int i=0;i<a.length;i++) {//学会使用双重for结构=
15             for(int j=0;j<a.length-i-1;j++) {//最大的在最右边了
16                 if(a[j] > a[j+1]) {
17                     int temp = a[j];
18                     a[j] = a[j+1];
19                     a[j+1] = temp;
20                 }
21             }
22         }
23         for(int i=0;i<a.length;i++) {
24             System.out.print(a[i] + " ");
25         }
26         
27         }
28 }
Prog4

程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。

5、题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

 1 import java.util.Scanner;
 2 public class Prog5{
 3     public static void main(String[] args){
 4         int[] A = new int[]{0,8,7,5,9,1,2,4,3,12};
 5         int[] B = sort(A);                        //排序
 6         print(B);
 7         System.out.println();
 8         System.out.print("请输入1个数插入:");
 9         Scanner scan = new Scanner(System.in);
10         int a = scan.nextInt();
11         scan.close();
12         int[] C = insert(a,B);                    //插入
13         print(C);                                //打印
14         }
15     
16     //选择排序
17     private static int[] sort(int[] A){
18         int[] B = new int[A.length];
19         for(int i=0;i<A.length-1;i++){
20             //int min = A[i];
21             for(int j=i+1;j<A.length;j++){
22                 if(A[i]>A[j]){//两两互换,和Prog4类似
23                     int temp = A[i];
24                     A[i] = A[j];
25                     A[j] = temp;
26                     }
27                 B[i] = A[i];
28                 }
29             }
30         B[A.length-1] = A[A.length-1];//*
31         return B;
32         }
33     
34     //打印
35     private static void print(int[] A){
36         for(int i=0;i<A.length;i++)
37             System.out.print(A[i]+" ");
38         }
39     //插入数字,A已经排好了序
40     private static int[] insert(int a,int[] A){
41         int[] B = new int[A.length+1];
42         for(int i=A.length-1;i>0;i--) {
43             if(a>A[i]){
44                 B[i+1] = a;
45                 for(int j=0;j<=i;j++)
46                     B[j] = A[j];//插入之前的都不变
47                 for(int k=i+2;k<B.length;k++)
48                     B[k] = A[k-1];//插入之后的都变一个,A短减1
49                 break;
50                 }
51         }
52         return B;
53         }
54     }
Prog5

程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

 ***逆序重点:

1 private static int[] nixu(int[] data,int [] B) {
2         // TODO Auto-generated method stub
3         for(int i=0;i<data.length;i++) {
4             B [i] = data[data.length-1-i];
5         }
6         return B;
7     }
逆序

 6、题目:打印出杨辉三角形。

 1 public class Prog6{
 2     public static void main(String[] args){
 3         int[][] n = new int[10][21];
 4         n[0][10] = 1;
 5         for(int i=1;i<10;i++)
 6             for(int j=10-i;j<10+i+1;j++)
 7                 n[i][j] = n[i-1][j-1]+n[i-1][j+1];//使两个数之间还有一个数为0
 8         for(int i=0;i<10;i++){
 9             for(int j=0;j<21;j++){
10                 if(n[i][j]==0)
11                     System.out.print("   ");//3个空格,为0的数输出三个空格
12                 else{
13                     if(n[i][j]<10)
14                         System.out.print("  "+n[i][j]);//2个空格
15                     else if(n[i][j]<100)
16                         System.out.print(" "+n[i][j]);//1个空格
17                     else
18                         System.out.print(n[i][j]);
19                     }
20                 }
21             System.out.println();
22             }
23         }
24     }
Prog6

//看看人家怎么实现美观的

7、题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

 1 import java.util.Scanner;
 2 
 3 public class Prog7{
 4     public static void main(String[] args){
 5         final int N = 10;
 6         System.out.print("请输入10个数的数组:");
 7         Scanner scan = new Scanner(System.in);
 8         int[] a = new int[N];
 9         for(int i=0;i<a.length;i++)
10             a[i] = scan.nextInt();
11         System.out.print("请输入一个小于10的数:");
12         int m = scan.nextInt();
13         scan.close();//输入结束
14         //把数组a前后分为两个数组b和c
15         int[] b = new int[N-m];
16         int[] c = new int[m];
17         
18         for(int i=0;i<N-m;i++)
19             b[i] = a[i];//前N-m个数放入数组b
20         for(int i=a.length-1,j=m;j>0;i--,j--)
21             c[j-1] = a[i];//后N-m个数放入数组c
22         for(int i=m,j=0;i<N;i++,j++)
23             a[i] = b[j]; //数组a中前N-m个数后移
24         for(int i=0;i<m;i++)
25             a[i] = c[i];//数组a中后m个数前移
26         for(int i=0;i<a.length;i++)
27             System.out.print(a[i]+" ");
28         }
29     }
Prog7

解题思路:将最初的数组分为3部分,放入3个数组内。

原文地址:https://www.cnblogs.com/CiMing/p/8376656.html