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 }
解题思路:先把图形分成两部分来看待,前五行一个规律,后四行一个规律,利用双重 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 }
程序分析:将阶乘另设置一个函数避免错误!
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 }
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 }
程序分析:可以利用选择法,即从后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 }
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
***逆序重点:
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 }
//看看人家怎么实现美观的
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 }
解题思路:将最初的数组分为3部分,放入3个数组内。