java基础笔试题(50题)

目录

第一题:兔子问题

1.1题目描述

1.2解题分析

1.3编码实现

第二题:素数问题

2.1题目描述

2.2解题分析

2.3编码实现

第三题:水仙花数题

3.1题目分析

3.2解题分析

3.3编码实现

第四题:正整数分解问题

4.1题目描述

4.2解题分析

4.3编码实现

第五题:成绩问题

5.1题目描述

5.2解题分析

5.3代码实现

第六题:最大最小公倍数问题

6.1题目描述

6.2解题分析

6.3编码实现

第七题:统计字符个数

7.1题目描述

7.2解题分析

7.3编码实现

第八题:累加数问题

8.1题目描述

8.2解题分析

8.3编码实现

9.1题目描述

9.2解题分析

9.3编码实现

第十题:小球弹起问题

10.1题目描述

10.2解题分析

10.3编码实现

第十一题:组合问题

11.1题目描述

11.2解题分析

11.3编码实现

第十二题:企业利润问题

12.1题目描述

12.2解题分析

12.3代码实现

第十三题:完全平方数问题

13.1题目描述

13.2解题分析

13.3编码实现

第十四题:日期问题

14.1题目描述

14.2解题分析

14.3代码实现

第十五题:大小数输出问题

15.1题目描述

15.2解题分析

15.3编码实现

第十六题:输出 9*9 题

16.1题目描述

16.2解题分析

16.3编码实现

第十七题:猴子吃桃问题

17.1题目描述

17.2解题分析

17.3编码实现

第十八题:乒乓球问题

18.1题目描述

18.2解题分析

18.3编码实现

第十九题:菱形问题

19.1题目描述

19.2解题分析

19.3.编码实现 

第二十题:分数和

20.1题目描述

20.2解题分析

20.3编码实现

第二十一题:累乘和问题

21.1题目描述

21.2解题分析

21.3编码实现

第二十二题:递归问题

22.1题目描述

22.2解题分析

22.3编码实现

第二十三题:年龄问题

23.1题目描述

23.2解题分析

23.3编码实现

第二十四题:打印数问题

24.1题目描述

24.2解题分析

24.3代码实现

第二十五题:回文数问题

25.1题目描述

25.2解题分析

25.3编码实现

第二十六题:判断星期几题目

26.1题目描述

26.2解题分析

26.3编码实现

第二十七题:素数问题

27.1题目描述

27.2解题分析

27.3编码实现

第二十八题:数排序问题

28.1题目描述

28.2解题分析

28.3编码实现

第二十九题:矩阵问题

29.1题目描述

29.2解题分析

29.3编码实现

第三十题:数组放数问题

30.1题目描述

30.2解题分析

30.3代码实现

第三十一题:数组逆序输出问题

31.1题目描述

31.2解题分析

31.3代码实现

第三十二题:输出整数一些位数问题

32.1题目描述

32.2解题分析

32.3编码实现

第三十三题:杨辉三角形问题

33.1题目描述

33.2解题分析

33.3编码实现

第三十四题:大小数输出问题

34.1题目描述

34.2解题分析

34.3代码实现

第三十五题:数组元素交换问题

35.1题目描述

35.2解题分析

35.3代码实现

第三十六题:数字移动问题

36.1题目描述

36.2解题分析

36.3代码实现

第三十七题:围圈剩人问题

37.1题目描述

37.2解题分析

37.3代码实现

第三十八题:字符串问题

38.1题目描述

38.2解题分析

38.3代码实现

第三十九题:调用函数问题

39.1题目描述

39.2解题分析

39.3代码实现

第四十题:字符串排序问题

40.1题目描述

40.2解题分析

40.3编码实现

第四十一题:猴分桃问题

41.1题目描述

41.2解题分析

41.3编码实现

第四十二题:解方程

42.1题目描述

42.2解题分析

42.3编码实现

第四十三题:求奇数个数问题

43.1题目描述

43.2解题分析

43.3编码实现

第四十四题:偶数表示为奇数和问题

44.1题目描述

44.2解题分析

44.3编码实现

第四十五题:素数整除问题

45.1题目描述

45.2解题分析

45.3代码实现

第四十六题:字符串连接问题

46.1题目描述

46.2解题分析

46.3编码实现

第四十七题:读取并打印问题

47.1题目描述

47.2解题分析

47.3代码实现

第四十八题:电话加密问题

48.1题目描述

48.2解题分析

48.3编码实现

第四十九题:字符串子串问题

49.1题目描述

49.2解题分析

49.3代码实现


第一题:兔子问题

1.1题目描述

题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?

1.2解题分析

兔子的规律为数列 1,1,2,3,5,8,13,21.... 可以发现兔子的增长规律为斐波那契函数:f(n)=f(n-1)+f(n-2),即可设计程序

1.3编码实现

import java.util.Scanner;
​
​
​
public class Demo04{
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    System.out.println(" 第"+n+"个月兔子总数为 "+fun(n));
  }
  private static int fun(int n){
    if(n==1 || n==2)
      return 1;
    else
      return fun(n-1)+fun(n-2);
  }
}

第二题:素数问题

2.1题目描述

判断101-200 之间有多少个素数,并输出所有素数。

2.2解题分析

一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数

2.3编码实现

public class SuShu {
  public static void main(String[] args) {
    int i,j,count=0; 
      for(i=101;i<=200;i++) {
        for(j=2;j<=i;j++) {
          if(i!=j && i%j==0) { 
             break;
          }if(i==j && i%j==0) { 
                count++; 
                   System.out.println(i);
          }
        }
      }
  System.out.println("101~200之间的素数是"+count+"个");
}
}

第三题:水仙花数题

3.1题目分析

打印出所有的 " 水仙花数 " ,所谓 " 水仙花数 " 是指一个三位数,其各位数字立方和等于该数本身。例 如: 153 是一个 " 水仙花数 " ,因为 153=1 的三次方+ 5 的三次方+ 3 的三次方。

3.2解题分析

利用for循环控制100-999的数,每个数分解出个位,十位,百位。

3.3编码实现

public class Flower {
  public static void main(String[] args) {
    int i = 100;          
    int x, y, z;
​
    while (i <= 999) {        
​
      x = i % 10;         
      y = i / 10 % 10;       
      z = i / 100;         
​
      if (i == x * x * x + y * y * y + z * z * z) {  
        System.out.println(i);
      }
      i++;
    }
  }
}

第四题:正整数分解问题

4.1题目描述

将一个正整数分解质因数。例如:输入 90, 打印出 90=233*5 。

4.2解题分析

程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成:

(1) 如果这个质数恰等于 n,则说明分解质因数的过程已经结束,打印出即可。

(2) 如果 n<>k,但 n 能被 k 整除,则应打印出 k 的值,并用 n 除以 k 的商 , 作为新的正整数 n, 重复执行第一步。

(3) 如果 n 不能被 k 整除,则用 k+1 作为 k 的值, 重复执行第一步。

4.3编码实现

import java.util.Scanner;
​
public class Num {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        decompose(n);
    }
​
    private static void decompose(int n) {
        for (int i = 2; i < (n + 1); i++) {
            while (((n % i) == 0) && (n != i)) {
                n /= i;
                System.out.print(i + "*");
            }
​
            if (n == i) {
                System.out.println(i);
​
                break;
            }
        }
    }
}

第五题:成绩问题

5.1题目描述

利用条件运算符的嵌套来完成此题:学习成绩 >=90 分的同学用 A 表示, 60-89 分之间的用 B 表示,60 分以下的用 C表示。

5.2解题分析

(a>b)?a:b 这是条件运算符的基本例子。

5.3代码实现

import java.util.Scanner;
​
public class CJ {
    public static void main(String[] args) {
        System.out.println("Please enter the score:");
        Scanner sc = new Scanner(System.in);
        int input = sc.nextInt();
        String result = input >= 90 ? "A" : ((input >= 60 && input < 90) ? "B" : "C");
        System.out.println(result);
    }
}

第六题:最大最小公倍数问题

6.1题目描述

输入两个正整数 m 和 n,求其最大公约数和最小公倍数。

6.2解题分析

用俩个方法分别求出最大公约数和最小公倍数

6.3编码实现

package demo03;
​
import java.util.Scanner;
​
public class Test1 {
    public static void main(String[] args){
        Scanner in= new Scanner(System.in);
        System.out.print("请输入第一个数字:");
        int a = in.nextInt();
        System.out.print("请输入第二个数字:");
        int b =in.nextInt();
        System.out.println("最大公约数是:"+ method(a,b));
        System.out.println("最小公倍数是:"+ method1(a,b));
    }
​
     public static int method(int m, int n){
        if(m<n){
            int temp=n;
            n=m;
            m=temp;
        }
        if(m%n==0){
            return n;
        }else{
            m%=n;
            return method(m,n);
        }
     }
​
     public static int method1(int p, int s){
        int i=1;
        if(p>s){
            int temp=s;
            s=p;
            p=temp;
        }
        int method1=p;
        while (method1%s!=0){
            method1=p*i;
            i++;
        }
        return  method1;
     }
​
}

第七题:统计字符个数

7.1题目描述

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

7.2解题分析

通过 scanStr.toCharArray()将字符串变为数组,再进行计算各个字符个数

7.3编码实现

import java.util.Scanner;
​
public class Test2 {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String scanStr = in.nextLine();
        int countL=0 , countD=0, countS=0,countA=0;
        char[] scanChar = scanStr.toCharArray();
​
​
        for(int i=0;i<scanChar.length;i++){
            if(Character.isLetter(scanChar[i])){
                countL++;
            }else if(Character.isDigit(scanChar[i])){
                countD++;
            }else if(Character.isSpaceChar(scanChar[i])){
                countS++;
            }else {
                countA++;
            }
        }
        System.out.println();
        System.out.println("中英文字母个数:"+countL);//汉字也算做了字符
        System.out.println("数字个数:"+countD);
        System.out.println("空格个数:"+countS);
        System.out.println("其他字符个数:"+countA);
    }
}

第八题:累加数问题

8.1题目描述

求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此时共有 5 个数相加 ) ,几个数相加有键盘控制。

8.2解题分析

关键是计算出每一项的值。

8.3编码实现

import java.util.Scanner;
​
public class Test8 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入1-9之间的数字:");
        int shu=sc.nextInt();
        int a=shu;
        int sum=0;
        System.out.println("请输入相加的个数:");
        int jiShu=sc.nextInt();
        if (shu>0&&shu<10){
            System.out.print(shu+"+");
            for (int i=1;i<jiShu;i++){
                shu=a+shu*10;
                sum+=shu;
                if(i==jiShu-1){
                    System.out.print(shu);
                }else {
                    System.out.print(shu+"+");
                }
            }
            System.out.println("的值是"+sum+a);
        }
        else{
            System.out.println("请输入1-9之间的数");
        }
​
​
​
    }
}
第九题:完数问题

9.1题目描述

一个数如果恰好等于它的因子之和,这个数就称为 " 完数 " 。例如 6=1+2+3. 编程找出 1000 以内的所有完数。

9.2解题分析

找出因数。

9.3编码实现

package demo03;
​
import java.util.Scanner;
​
public class Test9 {
    public static void main(String[] args){
​
        for(int i=1;i<=1000;i++){
            int sum=0;
            for(int j=1;j<i/2+1;j++){
                if(i%j==0){
                    sum+=j;
                }
            }
            if (i==sum){
                System.out.println(i);
            }
        }
​
    }
}

第十题:小球弹起问题

10.1题目描述

一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第 10 次落地时,共经过多少米?第 10 次反弹多高?

10.2解题分析

注意小数和弹起来回距离总和问题。

10.3编码实现

public class Test10 {
​
    public static void main(String[] args){
​
        double n =100,s=0;
​
​
        for(int j =1;j<=10;j++){
​
            s=s+n+n/2.0;
            n/=2.0;
            if(j==10){
                System.out.println("第十次高度为:"+n);
            }
​
​
        }
        System.out.println("共经过"+(s-n)+"米");
​
    }
​
}

第十一题:组合问题

11.1题目描述

有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

11.2解题分析

注意每个数不一样,三个嵌套循环即可

11.3编码实现

package demo03;
​
public class Test11 {
​
    public static void main(String[] args){
​
        int count=0,n =0;
​
​
        for(int i=1;i<5;i++){
​
            for(int j=1;j<5;j++){
​
                if(i==j)
​
                    continue;
                for(int k=1;k<5;k++){
​
                    if(k!=i && k!=j){
​
                        n=100*i+10*j+k;
                        count++;
                        System.out.print(n+" " );
​
​
                    }
​
                }
​
            }
​
        }
​
        System.out.println();
        System.out.println("符合条件的数共:"+count+"个");
​
    }
​
}

第十二题:企业利润问题

12.1题目描述

企业发放的奖金根据利润提成。利润 (I) 低于或等于 10 万元时,奖金可提 10%;利润高于 10 万元,低于 20 万元时,低于 10 万元的部分按 10%提成,高于 10 万元的部分,可可提成 7.5%;20 万到 40 万之间时,高于 20 万元的部分,可提成 5%;40 万到 60 万之间时高于 40 万元的部分,可提成 3%;60 万到 100 万之间时,高于 60 万元的部分,可提成 1.5%,高于 100 万元时,超过 100 万元的部分按 1%提成,从键盘输入当月利润 I ,求应发放奖金总数?

12.2解题分析

I<=10 --> bonus=I10% 10<I<=20 --> bonus=1010%+(I-10)7.5% 20<I<=40 --> bonus=1010%+107.5%+(I-20)5% 40<I<=60 --> bonus=1010%+107.5%+205%+(I-40)3% 60<I<=100 --> bonus=1010%+107.5%+205%+203%+(I-60)1.5% 100<I --> bonus=1010%+107.5%+205%+203%+401.5%+(I-100)*1%

12.3代码实现

import java.util.Scanner;
​
public class Test12 {
​
    public static void main(String[] args){
​
        System.out.println("请输入当月利润I:");
        Scanner sc = new Scanner(System.in);
        double I = sc.nextInt();
        double bonus=0;
​
        if(I<=10){
            bonus=I*0.1;
        }else if(10<I && I <=20){
            bonus=10*0.1+(I-10)*0.075;
        }else if(20<I && I<=40){
            bonus=10*0.1+10*0.075+(I-20)*0.05;
        }else if(40<I && I <=60){
            bonus=10*0.1+10*0.075+20*0.05+(I-40)*0.03;
        }else if(60<I && I <=100){
            bonus=10*0.1+10*0.075+20*0.05+20*0.03+(I-60)*0.015;
        }else if(I >100){
            bonus=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(I-100)*0.01;
        }
        System.out.println("根据您的输入,当月应得的奖金应为:"+bonus+"万元。");
    }
​
}

第十三题:完全平方数问题

13.1题目描述

一个整数,它加上100 后是一个完全平方数,再加上168 又是一个完全平方数,请问该数是多少?

13.2解题分析

先将该数加上 100 后再开方,再将该数加上 268 后再开方,如果开方后的结果满足条件,就是结果。

13.3编码实现

public class Test13 {
​
    public static void main(String[] args){
​
        for (int i=0;;i++){
​
            int x=(int)Math.sqrt(i+100);
            int y=(int)Math.sqrt(i+268);
            if (i+100==x*x&&i+268==y*y){
                System.out.println(i);
                break;
            }
​
        }
​
    }
​
}

第十四题:日期问题

14.1题目描述

输入某年某月某日,判断这一天是这一年的第几天?

14.2解题分析

分离年月日,三种月份的日子

14.3代码实现

import java.util.Scanner;
​
public class Test14 {
​
​
    public static void main(String[] args){
​
        int d=0;
        int day=0;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = sc.nextInt();
        if (year<0){
            System.out.println("输入错误,请重新输入!");
            System.exit(0);
        }
        
        System.out.println("请输入月份:");
        int month = sc.nextInt();
        if (month<0 || month>12){
            System.out.println("输入错误,请重新输入!");
            System.exit(0);
        }
​
        System.out.println("请输入日:");
        int days= sc.nextInt();
​
        if(day<=0 ||day>31){
            System.out.println("输入错误,请重新输入!");
            System.exit(0);
        }
​
​
        for (int i=1;i<=month;i++){
            switch(i){
​
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    day=31;
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    day = 30;
                    break;
                case 2:
                if((year%400==0)||(year%4==0&&year%100!=0)){
                    day = 29;
                }else{
                    day=28;
                }
                break;
            }
            d+=day;
​
​
            }
        System.out.println(year+"年"+month+"月"+day+"日是当年的第"+(d+day) +"天。");
​
        }
​
    }

第十五题:大小数输出问题

15.1题目描述

输入三个整数 x,y,z ,请把这三个数由小到大输出。

15.2解题分析

我们想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 x>y 则将 x 与 y 的值进行交换,然后再用 x 与 z 进行比较,如果 x>z 则将 x 与 z 的值进行交换,这样能使 x 最小。

15.3编码实现

​
import java.util.Scanner;
​
public class Test15 {
​
    public static void main(String[] args){
​
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入x的值:");
        int x = sc.nextInt();
        System.out.print("请输入y的值:");
        int y = sc.nextInt();
        System.out.print("请输入z的值:");
        int z = sc.nextInt();
​
        if (x>z){
            int temp=0;
            temp = x;
            x=z;
            z=temp;
​
        }
​
        if (x>y){
            int temp=0;
            temp = x;
            x = y;
            y= temp;
        }
​
        if (y>z){
            int temp = 0;
            temp = y;
            y = z;
            z = temp;
        }
        System.out.println("这三个数排序为:"+x+" "+y+" "+z);
​
    }
​
}

第十六题:输出 9*9 题

16.1题目描述

输出 9*9 口诀。

16.2解题分析

考虑分行与列,共 9 行 9 列, i 控制行, j 控制列。

16.3编码实现

​
public class Test16 {
​
    public static void main(String[] main){
​
        for (int i =1;i<=9;i++){
            for (int j=1; j<=i;j++){
​
                System.out.print(j+"*"+i+"="+i*j+" ");
​
            }
​
            System.out.println(" ");
​
        }
​
    }
​
}

第十七题:猴子吃桃问题

17.1题目描述

猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半, 又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

17.2解题分析

反着推

17.3编码实现

package demo03;
​
public class Test17 {
​
    public static void main(String[] args) {
        int x = 1;
        for (int i = 1; i < 10; i++) {
            x = 2 * (x + 1);
        }
        System.out.println(x);
    }
​
}

第十八题:乒乓球问题

18.1题目描述

两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。有人向队员打听比赛的名单。 a 说他不和 x 比, c 说他不和 x,z 比,请编程序找出三队赛手的名单。

18.2解题分析

排除题目给出的情况,剩下的即为答案

18.3编码实现

public class Test18 {
​
    public static void main(String[] args){
​
​
        for(char a = 'x';a <= 'z'; a++){
            for(char b = 'x'; b <= 'z'; b++){
                for(char c = 'x'; c <= 'z'; c++){
                    if(a != 'x' && c!='x'&&c!='z'&&a!=b&&a!=c&&b!=c){ // 后三个条件是去除重复情况
                        System.out.println("a  vs  "+a);
                        System.out.println("b  vs  "+b);
                        System.out.println("c  vs  "+c);
                    }
                }
            }
        }
​
    }
​
​
}

第十九题:菱形问题

19.1题目描述

打印出如下图案(菱形)

19.2解题分析

先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for 循环,第一层控制行,第二层控制列。

19.3.编码实现 

public class Test19 {
        public static void main(String[] args) {
            for (int i = 1; i <= 4; i++) {
                for (int x = 1; x <= 4 - i; x++) {
                    System.out.print(" ");
                }
                for (int j = 1; j <= 2 * i - 1; j++) {
                    System.out.print("*");
                }
                System.out.println();
            }
            for (int i = 3; i >= 0; i--) {
                for (int x = 1; x <= 4 - i; x++) {
                    System.out.print(" ");
                }
                for (int j = 1; j <= 2 * i - 1; j++) {
                    System.out.print("*");
                }
                System.out.println();
            }
        }
    }

第二十题:分数和

20.1题目描述

有一分数序列: 2/1 ,3/2 ,5/3 ,8/5 ,13/8 ,21/13... 求出这个数列的前 20 项之和。

20.2解题分析

找出分子与分母的变化规律。

20.3编码实现

​public class Test20 {
​
   public static void main(String[] args){
​
​
       double s=0;
       double x=1;
       double y=2;
​
​
       for(double n =1;n<=20;n++){
​
​
           s+=y/x;
           double temp = 0;
           temp = y;
           y=x+y;
           x=temp;
​
      }
       System.out.println("该数列前20项和为:" +s );
​
​
  }
​
}

第二十一题:累乘和问题

21.1题目描述

求 1+2!+3!+...+20! 的和

21.2解题分析

分解每个累乘再相加

21.3编码实现

public class Test21 {
​
   public static void main(String[] args){
​
       int n = 1;
       long s = 0,m = 1;
       for(int i=1;i<=20;i++){
​
           m=i*m;
           s+=m;
​
      }
​
       System.out.println("1+2!+3!+..+20!和为:"+ s);
​
  }
​
}

第二十二题:递归问题

22.1题目描述

利用递归方法求 5! 。

22.2解题分析

程序调用自身的编程技巧称为递归。

22.3编码实现

import java.util.Scanner;
​
public class Test22 {
​
    public static void main(String[] args){
​
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入num值:");
        int num = sc.nextInt();
​
        int n = factory(num);
        System.out.println("num!的值为:"+n);
​
    }
​
    public static int factory(int i){
​
        if (i==1){
            return i;
        }else {
​
            return (i*factory(i-1));
​
        }
​
    }
​
}

第二十三题:年龄问题

23.1题目描述

有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个人大 2 岁。问第三个人,又说比第 2人大两岁。问第 2 个人,说比第一个人大两岁。最后问第一个人,他说是 10 岁。请问第五个人多大?

23.2解题分析

利用逆向思维加递归算法

23.3编码实现

public class Test23 {
​
   public static void main(String[] args){
​
​
       int age = method(5,2);
       System.out.println("第五个人的年龄为:"+ age);
​
  }
​
   public static int method(int a,int b){
​
       if(a == 1){
​
           return 10;
​
      }else {
​
​
           return (method(a-1,b)+b);
​
​
      }
​
  }
​
}

第二十四题:打印数问题

24.1题目描述

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

24.2解题分析

先用字符函数把它变成字符,然后放入数组逆向输出

24.3代码实现

import java.util.Scanner;
​
public class Test24 {
​
    public static void main(String[] args){
​
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个不多余5位的正整数:");
        int  num = sc.nextInt();
        if (num>=100000 || num<=0){
​
            System.out.println("您输入有误,请重新输入!");
​
            System.exit(0);
        }
​
        String str = String.valueOf(num);
        System.out.println("它的位数为:"+str.length());
        char[] numS = str.toCharArray();
        for (int i = str.length()-1;i>=0;i--){
            System.out.print(numS[i]+" ");
        }
​
    }
​
}

第二十五题:回文数问题

25.1题目描述

一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同。

25.2解题分析

先变成字符,再放入数组,看04和13相同判断是否为回文数

25.3编码实现

import java.util.Scanner;
​
public class Test25 {
​
    public static void main(String[] args){
​
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要判断的数:");
        int num = sc.nextInt();
        if(num<10000 || num >=100000){
            System.out.println("您输入有误,请重新输入!");
            System.exit(0);
        }
​
        String str = String.valueOf(num);
        char[] numS = str.toCharArray();
​
        if(numS[0]==numS[4] && numS[1]==numS[3]){
​
            System.out.println("该数是回文数。");
​
        }else{
​
            System.out.println("该数不是回文数。");
​
        }
​
    }
​
}

第二十六题:判断星期几题目

26.1题目描述

请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

26.2解题分析

字符全变为大写或者小写,然后swith依次判断

26.3编码实现

import java.util.Scanner;
​
public class Test26 {
​
    public static void main(String[] args){
​
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入星期的首字母(不区分大小写):");
        String str1 = scanner.nextLine().toUpperCase();
​
        switch (str1) {
            case "M":
                System.out.println("Monday");
                break;
            case "T":
                System.out.println("请输入星期的次字母(不区分大小写):");
                String str2 = scanner.nextLine().toUpperCase();
                if (str2.equals("U")) {
                    System.out.println("Tuesday");
                } else if (str2.equals("H")) {
                    System.out.println("Thursday");
                } else {
                    System.out.println("您输入的数据有误!");
                }
                break;
            case "W":
                System.out.println("Wednesday");
                break;
            case "F":
                System.out.println("Friday");
                break;
            case "S":
                System.out.println("请输入星期的次字母(不区分大小写):");
                String str3 = scanner.nextLine().toUpperCase();
                if (str3.equals("U")) {
                    System.out.println("Sunday");
                } else if (str3.equals("A")) {
                    System.out.println("Saturday");
                } else {
                    System.out.println("您输入的数据有误!");
                }
                break;
            default:
                System.out.println("您输入的数据有误!");
​
        }
​
    }
}

第二十七题:素数问题

27.1题目描述

求100以内的素数

27.2解题分析

设置判断条件,如果可以整除就改变条件值,最后依旧判断条件输出。

27.3编码实现

public class Test27 {
​
    public static void main(String[] args) {
​
​
        for (int n = 2; n <= 100; n++) {
            int m = 0;
​
            for (int i = 2; i < n; i++) {
​
                if ((n % i) == 0) {
​
                    m = 1;
​
                }
            }
            if (m == 0) {
​
                System.out.print(n + " ");
​
            }
​
        }
​
    }
}

第二十八题:数排序问题

28.1题目描述

对 10 个数进行排序

28.2解题分析

冒泡法

28.3编码实现

import java.util.Scanner;
​
public class Test28 {
​
    public static void main(String[] args){
​
​
        int[] a  = new int[10];
        Scanner sc = new Scanner(System.in);
        for(int i = 0;i<10;i++ ){
​
            System.out.print("请输入第"+i+"数:");
​
            a[i]=sc.nextInt();
​
​
        }
​
        for(int m=0;m<a.length-1;m++){
​
            for(int n=0;n<a.length-1-m;n++)
                if (a[n] > a[n + 1]) {
                    int temp = a[n];
                    a[n] = a[n + 1];
                    a[n + 1] = temp;
                }
​
        }
        System.out.println("从小到大排序后的结果是:");
        for(int k=0;k<a.length;k++)
            System.out.print(a[k]+" ");
​
​
    }
​
}

第二十九题:矩阵问题

29.1题目描述

求一个 3*3 矩阵对角线元素之和

29.2解题分析

构造二维数组,用循环把各个点上的数相加

29.3编码实现

package demo03;
​
import java.util.Scanner;
​
public class Test29 {
​
    public static void main(String[] args){
​
        int[][] arr = new int[3][3];
        int sum = 0;
        Scanner console = new Scanner(System.in);
        for(int i = 0; i < 3; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                arr[i][j] = console.nextInt();
                if(i == j)
                    sum += arr[i][j];
                if((i == 0 && j ==2) || (i == 2 && j == 0))
                    sum += arr[i][j];
            }
        }
        System.out.println("对角线元素和为:"+sum);
​
​
    }
​
}

第三十题:数组放数问题

30.1题目描述

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

30.2解题分析

先定义数组,再扩大随便放入要插入的数,再全体排序

30.3代码实现

​import java.util.Arrays;
import java.util.Scanner;
​
public class Test30 {
​
    public static void main(String[] args) {
        int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        System.out.print("定义的数组为:");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println();
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个数:");
        int addNumber = sc.nextInt();
        array = Arrays.copyOf(array, array.length + 1);
        array[array.length - 1] = addNumber; 
        int i = 0;
        if (array[i] <= array[array.length - 2]) {
            Arrays.sort(array);
            System.out.print("插入一个数后的数组为:");
            for (i = 0; i < array.length; i++) {
                System.out.print(array[i] + " ");
            }
        } else {
            Arrays.sort(array);
            System.out.print("插入一个数后的数组为:");
            for (i = array.length - 1; i >= 0; i--) {
                System.out.print(array[i] + " ");
            }
        }
    }
​
}

第三十一题:数组逆序输出问题

31.1题目描述

将一个数组逆序输出。

31.2解题分析

建立一个数组,逆向遍历输出

31.3代码实现

package demo03;
​
import java.util.Scanner;
​
public class Test31 {
​
    public static void main(String[] args) {
​
​
        int[] a = new int[5];
        Scanner sc = new Scanner(System.in);
        for(int i = 0;i<5;i++ ){
​
            System.out.print("请输入第"+i+"数:");
​
            a[i]=sc.nextInt();
​
​
        }
        method(a);
​
​
    }
​
    public  static void method(int[] b){
​
        for (int i=b.length-1;i>=0;i--){
​
            System.out.print(b[i]+" ");
​
        }
​
    }
​
}

第三十二题:输出整数一些位数问题

32.1题目描述

取一个整数 a 从右端开始的 4~7 位。

32.2解题分析

输入数字转化成字符,再转化为数组,即可方便输出所需数

32.3编码实现

import java.util.Scanner;
​
public class Test32 {
​
    public static void main(String[] args) {
​
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个大于等于七位的整数:");
        long num = sc.nextInt();
        String ss = String.valueOf(num);
        char[] ch = ss.toCharArray();
        int b = ch.length;
        if (b<7){System.out.println("输入错误!");}
        else {
            System.out.println("截取从右端开始的4~7位是:"+ch[b-7]+ch[b-6]+ch[b-5]+ch[b-4]);
        }
​
​
    }
​
}

第三十三题:杨辉三角形问题

33.1题目描述

打印出杨辉三角形(要求打印出 10 行如下图)

33.2解题分析

创建一个二维数组,只输出杨辉三角的数字

33.3编码实现

import java.util.Scanner;
​
public class Test33 {
​
    public static void main(String[] args) {
​
​
        //定义了一个长度为10,高度为10的二维数组,数组中的值都为0;
        int[][] arr=new int[10][10];
        for(int i=0;i<arr.length; i++) {
            //由于只是给杨辉三角内的位置赋值,所以是j<=i
            for(int j=0;j<=i;j++) {
                //根据规律,使用if else 赋值
                if(j==0||j==i) {
                    arr[i][j]=1;
                }else {
                    arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
                }
            /*由于只是输出杨辉三角范围内的值,所以在内层循环就输出,这种方法不能全部赋值完之后再输出
               "\t"的原因是10和小于10的数组的宽度不同,所以使用\t制表符能使数与数之间距离相等
            */
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }
​
    }
​
}

第三十四题:大小数输出问题

34.1题目描述

输入 3 个数 a,b,c ,按大小顺序输出。

34.2解题分析

分别比较一下即可

34.3代码实现

import java.util.Scanner;
​
public class Test34 {
​
    public static void main(String[] args) {
​
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入第一个数:");
        int a = sc.nextInt();
        System.out.print("请输入第二个数:");
        int b = sc.nextInt();
        System.out.print("请输入第三个数:");
        int c = sc.nextInt();
​
​
        if(a<b){
            int t = a;
            a = b;
            b = t;
        }
        if(a<c){
            int t = a;
            a = c;
            c = t;
        }
        if(b<c){
            int t = b;
            b = c;
            c = t;
        }
​
        System.out.println("三数从大到小输出为:" + a+" " + b + " " + c);
    }
​
}

第三十五题:数组元素交换问题

35.1题目描述

输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

35.2解题分析

定义俩变量,遍历数组,最大的给一个,最小的给一个,改变数组值即可

35.3代码实现

import java.util.Scanner;
​
public class Test35 {
​
    public static void main(String[] args) {
​
        Scanner a = new Scanner(System.in);
        System.out.print("请输入数组长度:");
        int q = a.nextInt();
        int max = 0;
        int min = 0;
        int[] b = new int[q];
​
        for(int c = 0;c<q;c++){
            System.out.print("请输入数组的第"+(c+1)+"个元素:");
            int d = a.nextInt();//
            b[c] = d;
        }
        for(int e = 0;e<b.length;e++){
            if(b[e]>b[min]){
                min=e;
            }else if(b[max]>b[e]){
                max=e;
            }
        }
​
        int f = b[0];
        b[0] = b[min];
        b[min] = f;
​
​
        int g= b[q-1];
        b[q-1] = b[max];
        b[max] = g;
        for(int h = 0;h<b.length;h++){
            System.out.print(b[h]+" ");
        }
​
    }
​

第三十六题:数字移动问题

36.1题目描述

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

36.2解题分析

放进一个数组,会移到最前的老数组的数放在一个新数组,然后向后移动,再把新数组得数放进老数组

36.3代码实现

import java.util.Scanner;
​
public class Test36 {
​
    public static void main(String[] args) {
        int array[];
        System.out.print("请输入整数的个数:");
        Scanner sc=new Scanner(System.in);
        int  n=sc.nextInt();
        array = new int[n];
        for (int i = 0; i < n; i++) {
            System.out.print("输入第" + (i + 1) + "个数据:");
            array[i] = sc.nextInt();
        }
        System.out.print("你输入的数组为:");
        for(int i=0;i<n;i++) {
            System.out.print(array[i] + " ");
        }
        System.out.print("\n请输入向后移动的位数:");
        int m = sc.nextInt();
        int[] b = new int[m];
        for(int i=0; i<m; i++) {
            b[i] = array[n-m+i];
        }
        for(int i=n-1; i>=m; i--) {
            array[i] = array[i-m];
        }
        for(int i=0; i<m; i++) {
            array[i] = b[i];
        }
        System.out.print("位移后的数组是:");
        for(int i=0; i<n; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

第三十七题:围圈剩人问题

37.1题目描述

有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位。

37.2解题分析

给每个人状态值,走的人改变状态值,状态值为初始值的时候变量加1,加到3的人状态值改变,剩下的状态值没变的即是答案

37.3代码实现

import java.util.Scanner;
​
public class Test37 {
​
    public static void main(String[] args) {
​
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入数字个数:");
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i <arr.length; i++) {
            arr[i] = 1;
        }
        method(arr);//方法执行后,此时这个圈子只剩下一个人了
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==1){
                System.out.println("第"+(i+1)+"人剩下");
            }
        }
    }
​
​
    public static void method(int[] arr) {
        int count = 0;//循环三个计数
        int x=arr.length;//标识1的总数
        int i=0;    //数组角标
        while(x>1){
            if(arr[i]==1){
                count++;
            }
​
            if(count==3){
                arr[i]=0;//遇到数3的人了,退出圈子,标识立马变为0
                x--;    //标记为1的人数少一个
                count=0;//计数器归零,重新计数
            }
​
            if(i==arr.length-1){
                i=-1;
            }
​
            i++;//让人动起来
        }
​
​
    }
​
}

第三十八题:字符串问题

38.1题目描述

写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度。

38.2解题分析

放入一个数组即可

38.3代码实现

import java.util.Scanner;
​
public class Test38 {
​
    public static void main(String[] args) {
​
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个字符:");
        String str = sc.nextLine();
​
        char[] ch = str.toCharArray();
        System.out.println("该字符长度为:"+(ch.length));
​
    }
​
}

第三十九题:调用函数问题

39.1题目描述

编写一个函数,输入 n 为偶数时,调用函数求 1/2+1/4+...+1/n, 当输入 n 为奇数时,调用函数1/1+1/3+...+1/n( 利用指针函数 )

39.2解题分析

写俩函数调用一下即可,注意数值类型

39.3代码实现

import java.util.Scanner;
​
public class Test39 {
​
    public static void main(String[] args) {
​
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入n的值:");
        int n = sc.nextInt();
​
        if(n%2==0){
            System.out.println("结果:"+method(n));
        }else {
            System.out.println("结果:"+method1(n));
        }
​
    }
​
​
    static double method(int m){
​
        double sum = 0;
        for(int i=2 ; i<=m;i+=2){
​
            sum+=1.0/(2*i);
​
        }
        return sum;
​
    }
​
    static double method1(int m){
        double sum = 0;
        for(int i=1 ; i<m+1;i+=2){
​
            sum+=1.0/(i);
​
        }
        return sum;
​
    }
​
}

第四十题:字符串排序问题

40.1题目描述

字符串排序

40.2解题分析

比较对应位置字母的ASCII码值的大小

40.3编码实现

public class Test40 {
​
    public static void main(String[] args) {
​
        String[] input=new String[] {"tmc","aPad","apache","niHao","niHaoA"};
        String[] output=arraySort(input);
        for (String out:output) {
            System.out.println(out);
        }
    }
​
    public static String[] arraySort(String[] input){
        for (int i=0;i<input.length-1;i++){
            for (int j=0;j<input.length-i-1;j++) {
                if(isBiggerThan(input[j],input[j+1])){
                    String temp=input[j];
                    input[j]=input[j+1];
                    input[j+1]=temp;
                }
            }
        }
        return input;
    }
​
​
    private static boolean isBiggerThan(String first, String second){
        if(first==null||second==null||"".equals(first) || "".equals(second)){
            System.out.println("字符串不能为空!");
            return false;
        }
        char[] arrayFirst=first.toCharArray();
        char[] arraySecond=second.toCharArray();
        int minSize = Math.min(arrayFirst.length, arraySecond.length);
        for (int i=0;i<minSize;i++) {
            if((int)arrayFirst[i]>(int)arraySecond[i]){
                return true;
            }else if((int)arrayFirst[i] < (int)arraySecond[i]){
                return false;
            }
        }
        if(arrayFirst.length>arraySecond.length){
            return true;
        }else {
            return false;
        }
​
    }
​
}

第四十一题:猴分桃问题

41.1题目描述

海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

41.2解题分析

倒着推

41.3编码实现

public class Test41 {
​
   public static void main(String[] args) {
​
       int n;
       n = fun(0);
       System.out.println(" 原来有 "+n+" 个桃子 ");
  }
   private static int fun(int i){
       if(i==5)
           return 1;
       else
           return fun(i+1)*5+1;
       
  }
   
}

第四十二题:解方程

42.1题目描述

809??=800??+9*??+1

42.2解题分析

编个解方程式子,给个取值范围

42.3编码实现

public class Test42 {
​
    public static void main(String[] args) {
​
        int n = 0;
        boolean flag = false;
        for (int i = 10; i < 100; i++) {
            if (809 * i == 800 * i + 9 * i + 1) {
                flag = true;
                n = i;
                break;
            }
        }
​
        if (flag) {
            System.out.println(n);}
        else
        {System.out.println(" 无符合要求的数! ");
        }

​
    }
}

第四十三题:求奇数个数问题

43.1题目描述

求 0—7 所能组成的奇数个数。

43.2解题分析

暴力求解

43.3编码实现

class Odd07 {
​
    public static int oddNum(int num) {
        int sum = 0;
        for (int i = 1; i <= num + 1; i++) {
            if (i == 1) {
                sum += (num + 1) / 2;
            } else if (i == 2) {
                sum += (num - 1) * (num + 1) / 2;
            } else {
                int multi = (num - 1) * (num + 1) / 2;
                for (int j = num - 1; j > num - i + 1; j--) {
                    multi *= j;
                }
                sum += multi;
            }
        }
        return sum;
    }
​
    public static void main(String[] args) {
        System.out.println(oddNum(7));
    }
}

第四十四题:偶数表示为奇数和问题

44.1题目描述

一个偶数总能表示为两个素数之和。

44.2解题分析

除了2的素数都是奇数,俩奇数和为偶数

44.3编码实现

import java.util.Scanner;
​
public class Test44 {
​
    public static void main(String[] args) {
            System.out.print(" 请输入一个偶数: ");
            Scanner scan = new Scanner(System.in);
            int n = scan.nextInt();
            scan.close();
            if(n%2!=0){
                System.out.println(" 您输入的不是偶数! ");
                return;
            }
            twoAdd(n);
        }
// 偶数分解为素数之和
        private static void twoAdd(int n){
            for(int i=2;i<n/2+1;i++){
                if(isPrime(i)&&isPrime(n-i)){
                    System.out.println(n+"="+(i)+"+"+(n-i));
                    break;
                }
            }
        }
// 判断素数
        private static boolean isPrime(int m){
            boolean flag = true;
            for(int i=2;i<Math.sqrt(m)+1;i++){
                if(m%i==0){
                    flag = false;
                    break;
                }
            }
            return flag;
​
    }
​
}

第四十五题:素数整除问题

45.1题目描述

判断一个素数能被几个 9 整除

45.2解题分析

输入素数除9

45.3代码实现

import java.util.Scanner;
​
public class Test45 {
​
    public static void main(String[] args) {
        System.out.print("请输入一个数:");
        Scanner scan = new Scanner(System.in);
        long l = scan.nextLong();
        long n = l;
        scan.close();
        int count = 0;
        while (n > 8) {
            n /= 9;
            count++;
        }
        System.out.println(l + "能被" + count + "个9整除。");
    }
​
​
}

第四十六题:字符串连接问题

46.1题目描述

俩个字符串连接程序

46.2解题分析

直接➕

46.3编码实现

public class Test46 {
​
    public static void main(String[] args){
        String str1 = "guoYang";
        String str2 = " 老司机 ";
        String str = str1+str2;
        System.out.println(str);
    }
    
}

第四十七题:读取并打印问题

47.1题目描述

读取 7 个数( 1—50)的整数值,每读取一个值,程序打印出该值个数的*。

47.2解题分析

输入数组,for循环输出星号

47.3代码实现

import java.util.Scanner;
​
public class Test47 {
​
    public static void main(String[] args){
        System.out.print(" 请输入 7 个整数 (1-50) :");
        Scanner scan = new Scanner(System.in);
        int n1 = scan.nextInt();
        int n2 = scan.nextInt();
        int n3 = scan.nextInt();
        int n4 = scan.nextInt();
        int n5 = scan.nextInt();
        int n6 = scan.nextInt();
        int n7 = scan.nextInt();
        scan.close();
        printStar(n1);
        printStar(n2);
        printStar(n3);
        printStar(n4);
        printStar(n5);
        printStar(n6);
        printStar(n7);
    }
    static void printStar(int m){
        System.out.println(m);
        for(int i=0;i<m;i++)
            System.out.print("*");
        System.out.println();
    }
​
}

第四十八题:电话加密问题

48.1题目描述

某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每

位数字都加上 5, 然后用和除以 10 的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

48.2解题分析

用数组

48.3编码实现

public class Test48 {
​
    public static void main(String[] args){
        int n = 1234;
        int[] a = new int[4];
        for(int i=3;i>=0;i--){
            a[i] = n%10;
            n /= 10;
        }
        for(int i=0;i<4;i++)
            System.out.print(a[i]);
        System.out.println();
        for(int i=0;i<a.length;i++){
            a[i] += 5;
            a[i] %= 10;
        }
        int temp1 = a[0];
        a[0] = a[3];
        a[3] = temp1;
        int temp2 = a[1];
        a[1] = a[2];
        a[2] = temp2;
        for(int i=0;i<a.length;i++)
            System.out.print(a[i]);
    }
​
​
​

第四十九题:字符串子串问题

49.1题目描述

计算字符串中子串出现的次数

49.2解题分析

字符串放进数组,分别比较asiii值

49.3代码实现

public class Test49 {
​
    public static void main(String[] args){
        String str = "I come from County WuHu Province AnHui.";
        char[] ch = str.toCharArray();
        int count = 0;
        for(int i=0;i<ch.length;i++){
            if(ch[i]==' ')
                count++;
        }
        count++;
        System.out.println(" 共有 "+count+" 个字串 ");
    }
​
}
  • 16
    点赞
  • 314
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值