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
题目:对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 }
逆序
题目:打印出杨辉三角形。
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个数组内。