Java基础50题

1、古典兔子繁殖问题

/*
    古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
    小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
    程序分析:兔子的规律为数列1,1,2,3,5,8,13,21….
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要查询兔子对数的月份");
        int morth = sc.nextInt();
        int n = RabbitNumber(morth);
    }
    public static int RabbitNumber(int morth){
        if (morth<=2){
            return 1;
        }else {
            return RabbitNumber(morth-1)+RabbitNumber(morth-2);
        }
    }

2、100~200素数

/*
    判断101-200之间有多少个素数,并输出所有素数。 素数又叫质数,就是除了1和它本身之外,
    再也没有整数能被它整除的数。也就是素数只有两个因子。
     */
    public static void main(String[] args) {
        int j=0;
        int sum = 0;
        for (int i = 100; i <= 200; i++) {
            for ( j = 2; j < i; j++) {
                if (i%j==0){
                    break;
                }
            }
            if (j==i){
                System.out.printf("%d ",i);
                sum++;
            }
        }
        System.out.println("\n总共有"+sum);
    }

3、水仙花

/* 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身
     如:153 = 1^3+5^3+3^3;
     * */
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 100; i < 1000; i++) {
            int ge = i%10;
            int shi = i/10%10;
            int bai = i/100;
            if (Math.pow(ge,3)+Math.pow(shi,3)+Math.pow(bai,3)==i){
                System.out.printf("%d ",+i);
                sum++;
            }
        }
        System.out.println("\n总共有"+sum+"个");
    }

4、正整数分解成质因数

/*将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。*/
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();
        System.out.printf("%d=",number);
        for (int i = 2; i <= number; i++) {
            while (number%i==0 && number!=i){
                System.out.printf("%d*",i);
                number/=i;
            }
            if (number==i){
                System.out.printf("%d",i);
                number/=i;
            }
        }

    }

5、给成绩分等级

/*利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,
    60-89分之间的用B表示,60分以下的用C表示。*/
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入分数");
        int score = sc.nextInt();
        char rs = score >= 90 ? 'A' : score > 60 ? 'B' : 'C';
        System.out.println(rs);

    }

6、最大公约数和公倍数

/*输入两个正整数m和n,求其最大公约数和最小公倍数。     */
    public static void main(String[] args) {
        int divisor = 0;
        int MoM = 0;//公约数,公倍数

        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        if (m<n){
            int x = m^n;
            m = x^m;
            n = x^n;
        }
        for (int i = 1; i < m; i++) {
            if (m%i==0 && n%i==0){
                MoM=i;
            }
        }
        for (int i = m; i < 10000; i++) {
            if (i%m==0 && i%n==0){
                divisor = i;
                break;
            }
        }
        System.out.println("最大公约数为"+MoM+"\n最小公倍数为"+divisor);
    }

7、字符统计

/*输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。     */
    public static void main(String[] args) {
        /*注意: nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
    next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。!!!
         */
        Scanner sc = new Scanner(System.in);
        String rs = sc.nextLine();//!!!!!
        char[] a = rs.toCharArray();
        int num = 0;int letter = 0;int space = 0;int other = 0;
        for (int i = 0; i < a.length; i++) {
            if (a[i]>=48 && a[i]<=57){
                num++;
            }else if (a[i]>=65 && a[i]<=90 || a[i]>=97 && a[i]<=122){
                letter++;
            }else if (a[i]==32){
                space++;
            }else {
                other++;
            }
        }
        System.out.printf("数字个数:%d\n字母个数%d\n空格个数%d\n其他字符%d\n",num,letter,space,other);
    }

8、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字

/*求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222
    (此时共有5个数相加),几个数相加有键盘控制。输出结果的形式如:2+22+222=246;     */
    public static void main(String[] args) {
        //该题也可以用数组做出,定义int[] arr=new int[n];但是空间浪费太大
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入a的值");
        int a = sc.nextInt();int key=a;
        System.out.println("请输入有几个数相加");
        int n = sc.nextInt();
        int s = a;
        System.out.print(a);
        for (int i = 0; i < n-1; i++) {
            s+=function(a,key);
            System.out.print("+"+function(a,key));
            a=function(a,key);
        }
        System.out.print("="+s);
    }
    public static int function(int a ,int key){
        return key+a*10;
    }

9、完数

/*一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。    */
    public static void main(String[] args) {
        for (int i = 1; i <= 1000; i++) {
            int sum = 0;
            for (int j = 1; j < i; j++) {
                if (i%j == 0){
                    sum+=j;
                }
            }
            if (sum==i){
                System.out.print(i+" ");
            }
        }
    }

10、球落地反弹

/*一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?   */
    public static void main(String[] args) {
        int hight = 100;
        int n = 10;
        int sum = hight;
        for (int i = 0; i < n; i++) {
            sum+=hight;
            hight/=2;
        }
        System.out.println("在落地了"+n+"次后,经过了"+sum+"米");
        System.out.println("第"+n+"反弹了"+hight+"米");
    }

11、1~4组成3位数

/* 有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数?并把他们都输入。 */
    public static void main(String[] args) {
        for (int i = 1; i <= 4; i++) {
            for (int j = 1; j <= 4; j++) {
                for (int k = 1; k <= 4; k++) {
                    if (i==j || j==k || i==k ){
                        break;
                    }
                    System.out.printf("%d ",(i*100+j*10+k));
                    System.out.printf("%d ",(k*100+j*10+i));
                }
            }
        }
    }

12、利润提成

/*题目:企业发放的奖金根据利润提成。利润(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,求应发放奖金总数*/
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入利润");
        int i = sc.nextInt();
        double bonus = 0;
        if (i<=10){
            bonus=i*0.1;
        }else if(i<=20){
            bonus=10*0.1+(i-10)*0.75;
        }else if (i<=40){
            bonus=10*0.1+10*0.75+(i-20)*0.5;
        }else if (i<=60){
            bonus=10*0.1+10*0.75+20*0.5+(i-40)*0.03;
        }else if (i<100){
            bonus=10*0.1+10*0.75+20*0.5+20*0.03+(i-60)*0.015;
        }else {
            bonus=10*0.1+10*0.75+20*0.5+20*0.03+40*0.015+(i-100)*0.01;
        }
        System.out.println("您的为企业或得的利润为 "+i+"万元;应发的奖金总数为 "+bonus+"万元");
    }

13、完全平方数

/*一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?     */
    public static void main(String[] args) {
        for (int i = 0; i < 10000; i++) {
            if (number(i)){
                System.out.println(i);
                break;
            }
        }
    }
    public static boolean number(int num ){
        if (num<0){
            return false;
        }
        for (int i = 0; i < num/2.0; i++) {
            if (i*i == num){
                return true;
            }
        }
        return false;
    }

14、根据日期判断是这年的哪一天

/*输入某年某月某日,判断这一天是这一年的第几天?   */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Calendar cal = Calendar.getInstance();
        System.out.println("请输入年份");
        int year = sc.nextInt();
        cal.set(Calendar.YEAR,year);
        System.out.println("请输入月份");
        int morth = sc.nextInt();
        //注意:因为这里读月份是从0开始,所以要减一
        cal.set(Calendar.MONTH,(morth-1));
        System.out.println("请输入是几号");
        int day = sc.nextInt();
        cal.set(Calendar.DAY_OF_MONTH,day);
        System.out.println("今天是第"+cal.get(Calendar.DAY_OF_YEAR)+"天");
    }

15、3个整数比较大小

/*输入三个整数x,y,z,请把这三个数由小到大输出     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入三个数");
        int x = sc.nextInt();
        int y = sc.nextInt();
        int z = sc.nextInt();
        if (x>y){
            int a = x^y;
            x = a^x;
            y = a^y;
        }
        if (y>z){
            int a = y^z;
            y = a^y;
            z = a^z;
        }//冒泡排序,此时z是最大值
        if (x>y){
            int a = x^y;
            x = a^x;
            y = a^y;
        }
        System.out.printf("%d %d %d",x,y,z);
    }

16、乘法表

//输出9*9口诀
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.printf("%d*%d=%-3d",j,i,i*j);
            }
            System.out.println();
        }
    }

17、猴子吃桃子

/*猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩
    下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
    的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。*/
    // 10-1 9-4 8-10 7-22 6-46 5-94 4-190 3-382 2-766 1-1534
    public static void main(String[] args) {
        int num = 1;
        for (int i = 1; i < 10; i++) {
            num+=1;
            num*=2;
        }
        System.out.println("第一天一共摘了 "+num+"个桃");
    }

18、比赛名单

/*两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向
    队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。     */
    public static void main(String[] args) {
        /*char[] J = {'a','b','c'};
        char[] Y = {'x','y','z'};*/
        printList();
    }
    private static void printList(){
        char[] teamA={'a','b','c'};
        char[] teamB={'x','y','z'};
        char tempA='d';
        char tempB='d';

        for(int i=0;i<teamA.length;i++){
            for(int j=0;j<teamB.length;j++){
                /*题目要求:a不和z比*/
                if(teamA[i]=='a' && teamB[j]=='x'){
                    continue;
                    /*题目要求:c不和x、z比*/
                }else if((teamA[i]=='c' && teamB[j]=='x') || (teamA[i]=='c' && teamB[j]=='z')){
                    continue;
                    /*题目要求:当c不和x、z比时,只能和y比,所以a、b都不能和y比*/
                }else if((teamA[i]=='a' && teamB[j]=='y') || (teamA[i]=='b' && teamB[j]=='y')){
                    continue;
                }else{
                    /*此处是为了防止出现一个人重复和多人比的情况*/
                    if(tempA!=teamA[i] || tempB==teamB[j]){
                        System.out.println(teamA[i]+" VS "+teamB[j]);
                        tempA=teamA[i];
                        tempB=teamB[j];
                    }
                }
            }
        }
    }

19、菱形

/*题目:打印出如下图案(菱形)
     *
    ***
   ******
  ********
   ******
    ***
     *     */
    public static void main(String[] args) {
        int N=3;
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= N-i+1; j++) {//因为要配合下面四行,所以多大一个空格
                System.out.print(" ");
            }
            for (int j = 1; j <= 2*i-1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        int n = 4;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i-1; j++) {
                System.out.print(" ");
            }
            for (int j = 1; j <= (2*n+1)-2*i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

20、分数相加(后面运行数度很慢,数值很大)

/*有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
    下一项的分子等于上一项的分子和分母之和;下一项的分母等于上一项的分子     */
    public static void main(String[] args) {
        int n = 20;
        int sum = 0;
        for (int i = 0; i < n; i++) {
            double a = 2.0;
            double b = 1.0;
            sum += a/b;
            a += b;
            b = a;
        }
        System.out.println(sum);
    }

21、阶乘求和

/*求1+2!+3!+...+20!的和     */
    public static void main(String[] args) {
        int sum =0 ;
        for (int i = 1; i <= 20; i++) {
            sum+=fun(i);
        }
        System.out.println(sum);
    }
    public static int fun(int a){
        int x = 1;
        while (a>1){
            x*=a;
            a--;
        }
        return x;
    }

22、递归求阶乘

//利用递归方法求5!
    public static void main(String[] args) {
        System.out.println(function(5));
    }
    public static int function(int x){
        if (x<=1) {
            return 1;
        }
        return x*function(x-1);
    }

23、5个人的年龄

/*有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问
第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个
人多大?    */
    public static void main(String[] args) {
        int old = 10;
        for (int i = 1; i < 5; i++) {
            old+=2;
        }
        System.out.println(old);
    }

24、随机生成一个8位数以内的多位数,输出是几位数,并倒序输出每一位数上的数字

//给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个不多于5位的正整数");
        int Number = 0;
        int digits = 0;
        int number = 0;
        //判断数字是否符合条件
        while (true){
            number = sc.nextInt();
            Number = number;
            digits = 0;
            while (number!=0) {
                    number/=10;
                    digits++;
            }
            if (digits>=5){
                System.out.println("输入错误,请重新输入不多于5位数的正整数");
            }else {
                break;
            }
        }
        //倒着打印各位数字
        for (int i = 0; i < digits; i++) {
            System.out.printf("%d ",Number%10);
            Number/=10;
        }
        System.out.println("\n它是"+digits+"位数");
    }

25、随机生成一个多位数(1~5位数),判断是否是回文数

/*一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个五位数");
        int number = sc.nextInt();
        int[] arr = new int[5];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = number%10;
            number/=10;
        }
        if (arr[0]==arr[4] && arr[1]==arr[3]){
            System.out.println("是回文数");
        }else {
            System.out.println("不是回文数");
        }
    }

26、根据首字母或者前两个字母判断是周几

/*请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。*/
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入星期几");
        String rs = null;
        char week;
        while (true) {
            rs = sc.next();
            week = rs.charAt(0);
            if (week=='M'||week=='m'){
                System.out.println("星期一");
                break;
            }
            if (week=='T'||week=='t'){
                if (rs.charAt(1)=='u'){
                    System.out.println("星期二");
                    break;
                }else if (rs.charAt(1)=='h'){
                    System.out.println("星期四");
                    break;
                }
            }
            if (week=='W'||week=='w'){
                System.out.println("星期三");
                break;
            }
            if (week=='S'||week=='s'){
                if (rs.charAt(1)=='a'){
                    System.out.println("星期六");
                    break;
                }else if (rs.charAt(1)=='u'){
                    System.out.println("星期日");
                    break;
                }
            }
            if (week=='f'||week=='F'){
                System.out.println("星期五");
                break;
            }
            System.out.println("输入错误,请重新输入");
        }
    }

27、100以内的素数

 /*求100之内的素数
       一个数除了一和本身可以整除,其他的都不能整除,这个数就是素数     */
    public static void main(String[] args) {
        int sum = 0;
        int j ;
        for (int i = 1; i <= 100; i++) {
            for (j = 2; j <= Math.sqrt(i) ; j++) {//节省运算次数,提高算法的高效性
                if (i%j==0){
                    break;
                }//如果都不能整除,那么j在结束后会大于Math.sqrt(i)
            }
            if (j>Math.sqrt(i)){
                System.out.print(i+" ");
                sum++;
            }
        }
        /*for (int i = 1; i <= 100; i++) {
            for (j = 2; j < i ; j++) {//更容易理解
                if (i%j==0){
                    break;
                }//如果都不能整除,那么j在结束后会等于i
            }
            if (i==j){
                System.out.print(i+" ");
                sum++;
            }
        }*/
        System.out.println("\n总数为"+sum);
    }

28、10个整数进行排序

/*对10个数进行排序  ---冒泡排序  */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入10个数");
        int[] arr = new int[10];
        for (int i = 0; i < arr.length; i++) {
            arr[i]=sc.nextInt();
        }
        //冒泡排序
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-i-1; j++) {
                if (arr[j]>arr[j+1]){
                    int x = arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=x;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }

29、求矩阵对角线之和

/*求一个3*3矩阵对角线元素之和
      题意就是设置一个3*3的元素,然后求出其对角线的元素的和     */

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[][] arr = new int[3][3];
        System.out.println("输入9个数");
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                arr[i][j] = sc.nextInt();
            }
        }
        System.out.print("第一条对角线的元素和"+(arr[0][0]+arr[1][1]+arr[2][2]));
        System.out.print("第二条对角线的元素和"+(arr[0][2]+arr[1][1]+arr[2][0]));
    }

30、插入一个数后按照原数组的顺序进行排序

/*有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
      审题:按照原来的规律将它插入数组,而不是插入数组再按照原来的规律排序
      先判断number是否插入在数组的首位位置,如果不是那就是插入在中间 arr[i]-number-arr[i+1]    */
    public static void main(String[] args) {
        int[] arr = {8,21,26,53,73};
        int[] arr1 = new int[arr.length+1];
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数");
        int number = sc.nextInt();
        if (arr[0]>arr[1]){//降序
            if (number>=arr[0]){
                arr1[0]=number;
                for (int i = 1; i < arr1.length; i++) {
                    arr1[i]=arr[i-1];
                }
            }else if (number<= arr[arr.length-1]){
                arr1[arr1.length-1]=number;
                for (int i = 0; i < arr1.length - 1; i++) {
                    arr1[i]=arr[i];
                }
            }else {
                arr1=function(arr,number);
            }
        }else {//升序
            if (number<=arr[0]){
                arr1[0]=number;
                for (int i = 1; i < arr1.length; i++) {
                    arr1[i]=arr[i-1];
                }
            }else if (number >= arr[arr.length-1]){
                arr1[arr1.length-1]=number;
                for (int i = 0; i < arr1.length - 1; i++) {
                    arr1[i]=arr[i];
                }
            }else {
                arr1=function(arr,number);
            }
        }
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i]+" ");
        }
    }
    public static int[] function(int[] arr ,int number){
        int[] arr1 = new int[arr.length+1];
        int i;
        for (i = 0; i < arr.length-1; i++) {
            if (number<=arr[i]&&number>=arr[i+1]){
                break;
            }
            if (number>=arr[i]&&number<=arr[i+1]){
                break;
            }
        }
        for (int j = 0; j < arr1.length; j++) {
            arr1[j]=arr[j];
            if (j==i){
                break;
            }
        }
        arr1[i+1]=number;
        for (int j = i+1; j < arr1.length-1; j++) {
            arr1[j+1]=arr[j];
        }
        return arr1;
    }

31、数组排序

/*将一个数组逆序输出。     */
    public static void main(String[] args) {
        int[] arr = {21,412,512,74,231,52,1};
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[arr.length - i - 1]+" ");
        }
        System.out.println();
        for (int i = arr.length-1 ; i >= 0; i--) {
            System.out.print(arr[i]+" ");
        }//也是一样的
    }

32、取一个多位数(7位到9位)其中的任意位上的数值

/*取一个整数a从右端开始的4~7位。     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个不少于7位数的整数");
        long a ;
        while (true){
            a = sc.nextLong();
            if (a<1000000){
                System.out.println("输入错误,请重新输入");
            }else
                break;
        }
        System.out.println("第4位数 "+a/1000%10);
        System.out.println("第7位数 "+a/1000000%10);
    }

33、杨辉三角形

/*  打印杨辉三角(要求打印10行如下:)
                       1
                     1   1
                   1   2   1
                 1   3   3   1
               1   4   6   4   1
             1   5  10  10   5   1
           1   6  15  20  15   6   1
         1   7  21  35  35  21   7   1
       1   8  28  56  70  56  28   8   1
     1   9  36  84 126 126  84  36   9   1
     */
    public static void main(String[] args) {
        int n = 10;
        int[][] arr = new int[100][100];
        for (int i = 0; i < n; i++) {
            arr[i][0] = 1;
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 2 * n - 2 * i; j++) {
                System.out.print(" ");
            }
            for (int j = 1; j <= i; j++) {
                arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
            }
            for (int j = 0; j <= i; j++) {
                System.out.printf("%4d",arr[i][j]);
            }
            System.out.println();
        }
    }

34、输入一串数字比较大小

//输入3个数a,b,c,按大小顺序输出。
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        if (a>b && a>c){
            System.out.printf("%d ",a);
            if (b>c){
                System.out.printf("%d %d",b,c);
            }else {
                System.out.printf("%d %d",c,b);
            }
        }else if (b>a && b>c){
            System.out.printf("%d ",b);
            if (a>c){
                System.out.printf("%d %d",a,c);
            }else {
                System.out.printf("%d %d",c,a);
            }
        }else {
            System.out.printf("%d ",c);
            if (a>b){
                System.out.printf("%d %d",a,b);
            }else {
                System.out.printf("%d %d",b,a);
            }
        }
    }

35、找到一个数组的最大值和最小值并分别交换到首尾位置

/*输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
      分析:找出最大元素与最小元素索引,再进行交换    */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入数组的长度");
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < arr.length; i++) {
            System.out.print("输入第"+(i+1)+"个元素\n");
            arr[i]=sc.nextInt();
        }
        int max = funtion(arr,'M');//获取最大的数的索引
        int min = funtion(arr,'m');//获取最小的数的索引
        int tem = arr[0];
        arr[0]=arr[max];
        arr[max]=tem;
        tem = arr[arr.length-1];
        arr[arr.length-1]=arr[min];
        arr[min]=tem;
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
    public static int funtion(int[] arr,char index){
        int x = 0;
        if (index=='M') {//找最大值的索引
            for (int i = 0; i < arr.length - 1; i++) {
                if (arr[x] > arr[i + 1]) {
                    x = x;
                } else {
                    x = i+1;
                }
            }
        }else if (index=='m') {
            for (int i = 0; i < arr.length - 1; i++) {
                if (arr[x] < arr[i + 1]) {
                    x = x;
                } else {
                    x = i+1;
                }
            }
        }else {
            System.out.println("输入参数错误");
        }
        return x;
    }

36、有n个整数,将最后m个数移到最前面,其余数依次后移m个位置

/*有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
    题意理解:后面的m个数变成前面的,前面的n-m个数移到后面去
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入n的值");
        int n = sc.nextInt();
        int[] arr = new int[n];
        System.out.println("请输入"+n+"个数字");
        for (int i = 0; i < arr.length; i++) {
            arr[i]=sc.nextInt();
        }
        System.out.println("请输入m的值");
        int m = sc.nextInt();
        //把后面m个数储存起来
        int[] arr1 = new int[m];
        for (int i = 0; i < arr1.length; i++) {
            arr1[i]=arr[i+n-m];
        }
        //把前面的数移动m个位置到后面去
        for (int i = 0; i < n - m; i++) {
            arr[n-i-1]=arr[n-m-1-i];
        }
        //把原来后面m个数变到前面去
        for (int i = 0; i < arr1.length; i++) {
            arr[i]=arr1[i];
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }

37、报数游戏

/*有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),
    凡报到3的人退出圈子,问最后留下的是原来第几号的那位
    说实话,这题看完没有什么思路,看到别人都用boolean数组这个关键点才知道写
    利用boolean来解决退出圈子的问题 perfect        */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入有几个人围成一圈");
        int n =sc.nextInt();
        boolean[] IsNum = new boolean[n];
        for (int i = 0; i < IsNum.length; i++) {
            IsNum[i]=true;
        }
        int gs = 0;
        while (n>1){
            for (int i = 0; i < IsNum.length; i++) {
                if (IsNum[i]){
                    gs++;
                }
                if (gs==3){
                    IsNum[i]=false;
                    n--;
                    gs=0;
                }
            }
        }
        for (int i = 0; i < IsNum.length; i++) {
            if (IsNum[i]){
                System.out.println("最后留下的是第 "+(i+1)+"号位");
            }
        }
    }

38、统计不同类型的字符

/*写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。(应该是考方法调用吧)     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        System.out.println(Length(str));
    }
    public static int Length(String str){
        return str.length();
    }

39、编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n

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

40、给输入的字符串排序

/*字符串排序。     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串");
        String rs = sc.next();
        System.out.println("请输入升序:1 or 降序:0");
        int flag = sc.nextInt();
        char[] arr = new char[rs.length()];
        System.out.println(Short(rs ,flag));
    }

    public static String Short(String rs ,int flag ){
        //定义一个char数组,并且来接收字符串,来排序
        char[] arr = new char[rs.length()];
        for (int i = 0; i < rs.length(); i++) {
            arr[i] = rs.charAt(i);
        }
        if (flag==1) {//升序,把接收的字符数组排序
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = 0; j < arr.length - i - 1; j++) {
                    if (arr[j]>arr[j+1]){
                        char tem = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = tem;
                    }
                }
            }
        }else if(flag==0){//降序
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = 0; j < arr.length - i - 1; j++) {
                    if (arr[j]<arr[j+1]){
                        char tem = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = tem;
                    }
                }
            }
        }//定义StringBuild对象,来拼接成字符串
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]);
        }
        return sb.toString();
    }

41、5只猴子分桃子

/*海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,
    这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,
    它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?     */
    public static void main(String[] args) {
        for (int i = 0;; i++) {
            if (i%5==1)
            if (Number(5,i)){
                System.out.println("原来最少有 "+i+"个桃子");
                break;
            }
        }
    }
    public static boolean Number(int monkey ,int number){
        if (number%5==1){
            number-=1;
            number-=number/5;
            monkey--;
        }else {
            return false;
        }
        if (monkey==0){
            return true;
        }
        return Number(monkey,number);
    }

42、求809*??=800*??+9*??+1中的??

/*809*??=800*??+9*??+1
    其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。   */
    //              i*8<100         i>100/9.0
    public static void main(String[] args) {
        boolean flag = true;
        for (double i =  (100/9.0); i < 100/8.0; i++) {
            if (809*i==800*i+9*i+1){
                System.out.println(i+"\n"+"809*"+i+" = "+i*809);
                flag = flag;
                break;
            }
        }
        if (flag){
            System.out.println("没有这个数");
        }
    }

43、数组求解0~7的奇数个数

/*求0—7所能组成的奇数个数。    计算出能组成的总数除以2就可以了   */
    public static void main(String[] args) {
        int sum = 0;
        int n = 8;//0~7;八个数
        for (int i = 0; i < n; i++) {
            sum+=JustNumber(n,i);//i位能组成的个数的奇数
        }
    }
    public static int JustNumber(int a, int i){
        if (i==0){
            return a/2;
        }
        int sum = a-1;
        while (i>0){
            sum*=a;
            i--;
        }
        return sum/2;
    }

44、证明:一个偶数等于两个素数之和。

/*一个偶数总能表示为两个素数之和。      */
    public static void main(String[] args) {
        int num = 0;int x =0;
        for(num=2;num<100;num+=2) {
            x++;
            int N = num/2 + 1;
            int n = num/2 - 1;
            if (JustMuth(num / 2)) {
                System.out.printf("%d = %d+%-4d", num, num / 2, num / 2);
                continue;
            }
            while (n > 0) {
                if (JustMuth(n)&&JustMuth(N)){
                    System.out.printf("%d = %d+%-4d",num,n,N);
                    break;
                }
                n--;N++;
            }
            if (x==10){
                System.out.println();
                x=0;
            }
        }
    }
    public static boolean JustMuth(int n){
        for (int i = 2; i < n; i++) {
            if (n%i==0)
                return false;
            if (i==n-1)
                return true;
        }
        return true;
    }

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

/*判断一个素数能被几个9整除      */
    public static void main(String[] args) {
        for (int i = 10; i < 100; i++) {
            if (JustNum(i)){
                System.out.println(i+"能被 "+function(i)+"个9整除");
            }
        }
        System.out.println("出这道题的脑子是瓦特了?能被整除叫素数?");
    }
    public static boolean JustNum(int n){
        for (int i = 2; i < n; i++) {
            if (n%i==0)
                return false;
            if (i==n-1)
                return true;
        }
        return false;
    }
    public static int function(int n){
        int sum = 0;
        if (n%9==0 && n!=0){
            sum++;
            n/=9;
            return function(n);
        }
        return sum;
    }

46、拼接2@[TOC](个字符串

/*两个字符串连接程序
    * ????????   */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入两个字符串");
        String rs1 = sc.next();
        String rs2 = sc.next();
        String rs = rs1+rs2;
        System.out.println(rs);
    }

47、随机从[1,50]生成7个数,并且打印对应个数的*号

/*读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。           */
    public static void main(String[] args) {
        Random r = new Random();
        for (int i = 0; i < 7; i++) {
            int a = r.nextInt(50) + 1;
            System.out.print(a+" ");
            for (int j = 0; j < a; j++) {
                System.out.printf("*");
            }
            System.out.println();
        }
    }

48、4位数的加密问题

/*某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字
    都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。*/
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入4位数的整数");
        int num = 0;
        while (true){
            num = sc.nextInt();
            if (num/1000>0 && num/1000<10){
                break;
            }
        }
        //加密
        int ge = num%10;
        int shi = num/10%10;
        int bai = num/100%10;
        int qian = num/1000%10;

        ge = (ge+5)%10;
        shi = (shi+5)%10;
        bai = (bai+5)%10;
        qian = (qian+5)%10;
        ge = qian;
        shi = bai;
        System.out.println(ge+shi*10+bai*100+qian*1000);
    }

49、统计字符串子串在父串中出现的次数

/*计算字符串中子串出现的次数         */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串");
        String rs = sc.next();
        int sum = 0;
        for (int i = 0; i < rs.length(); i++) {
            for (int j = i+1; j < rs.length()+1; j++) {
                System.out.print(rs.substring(i,j)+"   ");
                sum++;
            }
            System.out.println();
        }
        System.out.println(rs+"子串出现的次数"+sum);
    }

50、学生成绩

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值