JAVA 基础编程练习题

1 【程序 1 不死神兔】

题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月
又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析: 兔子的规律为数列 1,1,2,3,5,8,13,21....

package CountRabbit;

import java.io.*;
import java.util.Scanner;
public class CountRabbit {
    /**
     * 不死神兔算法,使用递归
     */
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("Please input mouth:");
        int mouth = input.nextInt();
        System.out.println("第"+mouth+"个月有"+getRabbitNum(mouth)+"只兔子");
        //  int mouth =3;
        // System.out.println("第"+mouth+"个月有"+getRabbitNum(mouth)+"只兔子");
    }
    private static int getRabbitNum(int mouth){
        if(mouth==1||mouth==2){
            return 1;
        }
        else
            return getRabbitNum(mouth-1)+getRabbitNum(mouth-2);
    }
}

 

2 【程序 2 输出素数】

题目:判断 101-200 之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除,则表明此数不是素数,
反之是素数。

package FindPrimeNumber;

public class FindPrimeNumber {
    //判断 101-200 之间有多少个素数,并输出所有素数。
    public static void main(String[] args){
        int count=0;    //记录素数的个数
        int flag;       //flag为1则不是素数
        int i,j;        //用于for循环
        System.out.println("101-200 之间的素数为:");
        for(i=101;i<=200;i++){
            int max = (int) Math.sqrt(i);
            flag=0;
            for(j=2;j<=max;j++){
                if(i%j==0){
                    flag=1;
                    break;
                }
            }
            if(flag==0){
                System.out.println(i+" ");
                count++;
            }
        }
        System.out.println("共有"+count+"个素数");
    }
}

3 【程序 3 水仙花数】
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例
如: 153 是一个"水仙花数",因为 153=1 的三次方+5 的三次方+3 的三次方。
程序分析:利用 for 循环控制 100-999 个数,每个数分解出个位,十位,百位。

package NarcissisticNumber;

public class NarcissisticNumber {
    //题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
    public static void main(String[] args){
        int a,b,c;      //a,b,c分别为百位,十位,个位
        int sum;
        System.out.println("所有的\"水仙花数\"为:");
        for(int i=100;i<1000;i++){
            a=i/100;
            b=(i/10)%10;
            c=i%10;
            sum=(int)Math.pow(a,3)+(int)Math.pow(b,3)+(int)Math.pow(c,3);
            if(sum==i){
                System.out.println(i);
            }
        }
    }
}

4 【程序 4 分解质因数】
题目:将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5。
程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成:
(1)如果这个质数恰等于 n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果 n<>k,但 n 能被 k 整除,则应打印出 k 的值,并用 n 除以 k 的商,作为新的正整数 n,重复执行第一
步。
(3)如果 n 不能被 k 整除,则用 k+1 作为 k 的值,重复执行第一步。

package PrimeFactorization;

import java.util.Scanner;
public class PrimeFactorization {
    //题目:将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5。
    public  static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("Please input integer:");
        int n= input.nextInt();
        int flag;
        String str = n+"=";
        if(n==1){                   //输入1时特殊处理
            str = str+n+"*";
        }
        for(int i=2;i<=n;i++){
            int max = (int) Math.sqrt(i);
            flag=0;
            for(int j=2;j<=max;j++){
                if(i%j==0){
                    flag=1;
                    break;
                }
            }
            if(flag==0){            //找到质数
                if(n%i==0){         //该质数是n的因数
                    str=str+i+"*";  //字符修改
                    n=n/i;          //修改n为除以i之后的数
                    i=1;            //质数从2重新开始找
                }
            }
        }
        str = str.substring(0,str.length()-1);  //去掉字符串中最后一个*
        System.out.println(str);
    }
}

5 【程序 5 判断分数等级】
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90 分的同学用 A 表示, 60-89 分之间的用 B 表示,
60 分以下的用 C 表示。
程序分析: (a>b)?a:b 这是条件运算符的基本例子。

package GradeLevel;

import java.util.Scanner;
public class GradeLevel {
    public static void main(String[] args){
        //题目:利用条件运算符的嵌套来完成此题:学习成绩>=90 分的同学用 A 表示, 60-89 分之间的用 B 表示,
        //60 分以下的用 C 表示。
        System.out.println("请输入同学的成绩:");
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        char level = n>=60?(n>89?'A':'B'):'C';
        System.out.println("该同学的成绩等级为:"+level);
    }
}

6 【程序 6 求最大公约数及最小公倍数】
题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。
程序分析:利用辗除法。

package LCMandHCF6;

import java.util.Scanner;
public class LCMandHCF {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一个整数:");
        int A = input.nextInt();
        System.out.println("请输入第二个整数:");
        int B = input.nextInt();
        System.out.println("最大公约数为:"+getLCM(A,B));
        System.out.println("最小公倍数为:"+getHCF(A,B));
    }
    private static int getLCM(int A,int B){
        //求最大公约数,辗转相除法
        int max=A>B?A:B;    //得到A,B的较大值
        int min=A>B?B:A;    //得到A,B的较小值
        int k=max%min;      //余数
        while(k!=0){
            max=min;
            min=k;
            k=max%min;
        }
        return min;
    }
    private static int getHCF(int A,int B){
        //求最小公倍数(最大公约数*最小公倍数=A*B)
        return A*B/getLCM(A,B);
    }
}

7 【程序 7 处理字符串】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:利用 while 语句,条件为输入的字符不为'\n'.

package CountString7;

import java.util.Scanner;
public class CountString {
    public static void main(String[] args){
        System.out.print("请输入一串字符:");
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        input.close();
        count(str);
    }
    private static void count(String str){
        String E1 = "[\u4e00-\u9fa5]";//汉字
        String E2 = "[a-zA-Z]";
        String E3 = "[0-9]";
        String E4 = "\\s";//空格
        int countChinese = 0;
        int countEnglish = 0;
        int countNumber = 0;
        int countSpace = 0;
        int countOthers = 0;
        String[] s = str.split("");             //将字符串转化为字符串数组
        /*
        char[] array_Char = str.toCharArray();  //将字符串转化为字符数组
        for (int j=0;j<array_Char.length;j++){
            System.out.println(array_Char[j]);
        }*/
        for(int i=0;i<s.length;i++){
            if(s[i].matches(E1))
                countChinese++;
            else if(s[i].matches(E2))
                countEnglish++;
            else if(s[i].matches(E3))
                countNumber++;
            else if(s[i].matches(E4))
                countSpace++;
            else
                countOthers++;
        }
        System.out.println("输入的汉字个数:"+countChinese);
        System.out.println("输入的字母个数:"+countEnglish);
        System.out.println("输入的数字个数:"+countNumber);
        System.out.println("输入的空格个数:"+countSpace);
        System.out.println("输入的其它字符个数:"+countOthers);
    }
}

8 【程序 8 输入数字求和】

题目:求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此时共有 5 个
数相加),几个数相加有键盘控制。
程序分析:关键是计算出每一项的值。

package Sum8;

import java.util.Scanner;
public class Sum {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入a数字:");
        int a = input.nextInt();
        System.out.println("请输入相加的个数:");
        int b = input.nextInt();
        System.out.println("和为:"+Sum(a,b));
    }
    private static int Sum(int a,int b){
        int sum=0;
        for(int i=b,j=0;i>0;i--,j++){
            sum=sum+i*a*(int)Math.pow(10,j);
        }
        return sum;
    }
}

9 【程序 9 求完数】

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

package PerfectNumber9;

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

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

package FreeFall10;

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

11 【程序 11 求不重复数字】
题目:有 1、 2、 3、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是 1、 2、 3、 4。组成所有的排列后再去 掉不满足条件的排
列。

package NoRepetitionNumber11;

public class NoRepetitionNumber {
public static void main(String[] args){
//题目:有 1、 2、 3、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
int i,j,k; //i为百位,j为十位,k为个位
int n=4; //n为数字个数
int count=0;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
for(k=1;k<=n;k++){
if(i!=j&&i!=k&&j!=k){
count++;
System.out.println(i*100+j*10+k);
}
}
}
}
System.out.println(n+"个数字共能组成"+count+"种互不相同且无重复数字的三位数");
}
}

12 【程序 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,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

package CalculationBonus12;

import java.util.Scanner;
public class CalculationBonus {
    public static void main(String[] args){
        //题目:企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
        System.out.println("请输入当月利润(万元):");
        Scanner input = new Scanner(System.in);
        long n = input.nextLong();
        double sum=0;
        if(n<=10){
            sum = (n*0.1);
        }else if(n<=20){
            sum = (10*0.1+(n-10)*0.075);
        }else if(n<=40){
            sum = (10*0.1+10*0.075+(n-20)*0.05);
        }else if(n<=60){
            sum = (10*0.1+10*0.075+20*0.05+(n-40)*0.03);
        }else if(n<=100){
            sum = (10*0.1+10*0.075+20*0.05+20*0.03+(n-60)*0.015);
        }else{
            sum = (10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(n-100)*0.01);
        }
        System.out.println("奖金为:"+sum+"万元");
    }

}

13 【程序 13 根据条件求数字】
题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
程序分析:在 10 万以内判断,先将该数加上 100 后再开方,再将该数加上 268 后再开方,如果开方后的结
果满足如下条件,即是结果。

package CalculateNumber13;

public class CalculateNumber {
    public static void main(String[] args){
        //题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
        double m,n;
        for(double i=0;i<=10000;i++){       //从0遍历到10000
            m = Math.sqrt(i+100);
            n = Math.sqrt(i+168);
            if((int)m==m && (int)n==n){     //若开方后的数字是整数
                System.out.println(i);
            }
        }
    }
}

14 【程序 14 求日期】
题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以 3 月 5 日为例,应该先把前两个月的加起来,然后再加上 5 天即本年的第几天,特殊情况,
闰年且输入月份大于 3 时需考虑多加一天。

package CalculateDate14;

import java.util.Scanner;
public class CalculateDate {
    //题目:输入某年某月某日,判断这一天是这一年的第几天?
    public static void main(String[] args){
        int sum=0,flag=0;
        Scanner input = new Scanner(System.in);
        System.out.println("请输入年份:");
        int y = input.nextInt();
        System.out.println("请输入月份:");
        int m = input.nextInt();
        System.out.println("请输入几号:");
        int d = input.nextInt();
        int[] mouth={0,31,28,31,30,31,30,31,31,30,31,30,31};
        for(int i=0;i<m;i++){       //加上之前所有月份的天数
            sum = sum+mouth[i];
        }
        sum += d;                   //加上当月的天数
        if(y%400==0 || (y%100!=0 && y%4==0))    //判断若是闰年
            flag=1;
        if(flag==1 && m>2)         //若该年是闰年且月份大于2月
            sum++;
        System.out.println(y+"年"+m+"月"+d+"日是这一年的第"+sum+"天");
    }
}

15 【程序 15 排序】
题目:输入三个整数 x,y,z,请把这三个数由小到大输出。
程序分析:我们想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 x>y 则将 x 与 y 的值进行交换,
然后再用 x 与 z 进行比较,如果 x>z 则将 x 与 z 的值进行交换,这样能使 x 最小。

package Sort15;

import java.util.Scanner;
public class Sort {
    public static void main(String[] args){
        //题目:输入三个整数 x,y,z,请把这三个数由小到大输出。
        System.out.println("请输入三个整数:");
        Scanner input=new Scanner(System.in);
        int[] num =new int[3];
        for (int i = 0; i < num.length; i++) {
            num[i]=input.nextInt();
        }
        /*
        int num1,num2,num3;
        num1=input.nextInt();
        num2=input.nextInt();
        num3=input.nextInt();
        System.out.println(num1+" "+num2+" "+num3);
        */
        int temp;
        if(num[0]>num[1]){
            temp=num[0];
            num[0]=num[1];
            num[1]=temp;
        }
        if(num[0]>num[2]){
            temp=num[0];
            num[0]=num[2];
            num[2]=temp;
        }
        if(num[1]>num[2]){
            temp=num[1];
            num[1]=num[2];
            num[2]=temp;
        }
        for (int i = 0; i < num.length; i++) {
            System.out.println(num[i]);
        }
    }
}

16 【程序 16 输入 9*9 表】
题目:输出 9*9 口诀。
程序分析:分行与列考虑,共 9 行 9 列, i 控制行, j 控制列
 

package NineNineTasble16;

public class NineNineTasble {
    //题目:输出 9*9 口诀。
    public static void main(String[] args){
        for(int i=1;i<=9;i++){
            for(int j=1;j<=i;j++){
                System.out.print(j+"*"+i+"="+i*j+'\t');
            }
            System.out.println();
        }
    }
}

17 【 程序 17 猴子吃桃问题】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又
将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想
再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。
 

package MonkeyEatPeach17;

public class MonkeyEatPeach {
    //题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又
    //将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想
    //再吃时,见只剩下一个桃子了。求第一天共摘了多少。
    public static void main(String[] args){
        int n=10;
        int sum=1;
        for(int i=1;i<n;i++){
            sum = (sum+1)*2;
        }
        System.out.println("第一天共摘了"+sum+"个桃子");
    }
}

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

package PingPong18;

public class PingPong {
    //题目:两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。
    //有人向队员打听比赛的名单。 a 说他不和 x 比, c 说他不和 x,z 比,请编程序找出三队赛手的名单。
    public static void main(String[] args){
        char i,j,k;
        for(i='x';i<='z';i++){
            for(j='x';j<='z';j++){
                for(k='x';k<='z';k++){
                    if(i==j||j==k||i==k||i=='x'||k=='x'||k=='z')
                        continue;
                    else
                        System.out.println("Rivals of a,b,c are "+i+","+j+","+k);
                }
            }
        }
    }
}

19 【程序 19 打印菱形图案】
题目:打印出如下图案(菱形)
    *
   ***
 ******
********
 ******
   ***

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

 

package PrintDiamond19;

public class PrintDiamond {
    //题目:打印出如下图案(菱形)
    public static void main(String[] args){
        int lay;
        lay = 7;//菱形的总长度
        for(int i=1;i<=(lay+1)/2;i++){          //输出上半部分
            for(int j=1;j<=(lay+1)/2-i;j++){    //输出空格
                System.out.print(" ");
            }
            for(int k=1;k<=2*i-1;k++){          //输出*
                System.out.print("*");
            }
            System.out.println();               //换行
        }
        for(int i=(lay+1)/2+1;i<=lay;i++){      //输出下半部分
            for(int j=1;j<=i-(lay+1)/2;j++){    //输出空格
                System.out.print(" ");
            }
            for(int k=1;k<=lay-(i-(lay+1)/2)*2;k++){          //输出*
                System.out.print("*");
            }
            System.out.println();               //换行
        }
    }
}

20 【程序 20 求前 20 项之和】
题目:有一分数序列: 2/1, 3/2, 5/3, 8/5, 13/8, 21/13...求出这个数列的前 20 项之和。
程序分析:请抓住分子与分母的变化规律。
 

 

package TopSum20;

public class TopSum {
    //题目:有一分数序列: 2/1, 3/2, 5/3, 8/5, 13/8, 21/13...求出这个数列的前 20 项之和。
    public static void main(String[] args){
        int n=20;       //前20项
        double sum=0;   //和
        for(int i=1;i<=n;i++){
            sum = sum + (double)fib(i+2)/fib(i+1);
        }
        System.out.print(sum);
    }
    private static int fib(int n){      //斐波那契数列
        if(n==1||n==2)
            return 1;
        else
            return fib(n-1)+fib(n-2);
    }
}

21 【程序 21 求阶乘】
题目:求 1+2!+3!+...+20!的和
程序分析:此程序只是把累加变成了累乘。
 

package Factorial21;

public class Factorial {
    //题目:求 1+2!+3!+...+20!的和
    public static void main(String[] args){
        int n=20;       //n个阶乘和
        int sum=0,fac;  //fac为阶乘,sum为总和
        for(int i=1;i<=n;i++){
            fac=1;
            for(int j=1;j<=i;j++){
               fac=j*fac;
            }
            sum += fac;
        }
        System.out.println(sum);
    }
}

22 【程序 22 递归求阶乘】
题目:利用递归方法求 5!。
程序分析:递归公式: fn=fn_1*4!
 

package Factorial22;

public class Factorial {
    //题目:利用递归方法求 5!。
    public static void main(String[] args){
        int n=5;
        System.out.println(Fac(n));
    }
    private static int Fac(int n){
        if(n>0)
            return Fac(n-1)*n;
        else
            return 1;
    }
}

23 【程序 23 求岁数】
题目:有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个
人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后问第一个人,他
说是 10 岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁
数,依次类推,推到第一人( 10 岁) ,再往回推。
 

package GetAge23;

public class GetAge {
    //题目:有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个
    //人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后问第一个人,他
    //说是 10 岁。请问第五个人多大?
    public static void main(String[] args){
        int n=5;    //n为第几个人
        System.out.print(Age(n));
    }
    private static int Age(int n){
        if(n==1)
            return 10;
        else
            return Age(n-1)+2;
    }
}

24 【程序 24 根据输入求输出】
题目:给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
 

 

package GetInToOut24;

import java.util.Scanner;
public class GerInToOut {
    //题目:给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
    public static void main(String[] args){
        System.out.println("请输入一个不多于5位的正整数:");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println("它是"+GetBit(n)+"位数");
        System.out.println("逆序为"+GetInvert(n));
    }
    private static int GetBit(int n){   //得到n的位数
        if(n/10000>0){
            return 5;
        }else if(n/1000>0){
            return 4;
        }else if(n/100>0){
            return 3;
        }else if(n/10>0){
            return 2;
        }else{
            return 1;
        }
    }
    private static int GetInvert(int n){    //得到n的逆序
        int b = GetBit(n);
        int out=0;
        if(b==1){
            out=n;
        }else if(b==2){
            out=(n%10)*10+n/10;
        }else if(b==3){
            out=(n%10)*100+(n/10%10)*10+n/100;
        }else if(b==4){
            out=(n%10)*1000+(n%100/10)*100+(n/100%10)*10+n/1000;
        }else{
            out=(n%10)*10000+(n%100/10)*1000+(n/100%10)*100+(n/1000%10)*10+n/10000;
        }
        return out;
    }
}

25 【程序 25 求回文数】
题目:一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同。
  

 

package PalindromeNumber25;

import java.util.Scanner;
public class PalindromeNumber {
    //题目:一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同。
    public static void main(String[] args){
        System.out.println("请输入一个5位数:");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        if(IsPalindrome(n))
            System.out.println(n+"是一个回文数");
        else
            System.out.println(n+"不是一个回文数");
    }
    private static boolean IsPalindrome(int n){
        if(n/10000==n%10 && (n/1000%10)==(n%100/10))    //万位=个位,千位=十位
            return true;
        else
            return false;
    }
}

26 【程序 26 求星期】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或 if 语句判断第二个字母。
 

方法一:利用map

import java.util.Scanner;
public class GetWeek {
    //题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
    public static void main(String[] args){
        Map<String,String> map = new HashMap<String,String>();
        map.put("m","星期一");
        map.put("tu","星期二");
        map.put("w","星期三");
        map.put("th","星期四");
        map.put("f","星期五");
        map.put("sa","星期六");
        map.put("su","星期日");
        Scanner input = new Scanner(System.in);
        System.out.println("请输入星期几第一个字母:");
        String str= input.next();
        //方法二
        if(map.get(str)==null){
            System.out.println("目前无法判断,请输入第二个字母:");
            str= str + input.next();
            if(map.get(str)==null){
                System.out.println("输入字母匹配不到任意天,请检查。");
            }else
                System.out.println(map.get(str));
        }else
            System.out.println(map.get(str));
        
    }

  

package GetWeek26;

import java.io.IOException;
import java.util.Scanner;
public class GetWeek {
    //题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入星期几第一个字母:");
        String str= input.next();
        char a = str.charAt(0);
        /*
        char a=' ';
        try{
            a = (char)System.in.read();
        }catch (IOException e){}
        */
        if(a=='M'||a=='m'){
            System.out.println("星期一");
        }else if(a=='W'||a=='w'){
            System.out.println("星期三");
        }else if(a=='F'||a=='f'){
            System.out.println("星期五");
        }else if(a=='T'||a=='t'||a=='S'||a=='s'){
            System.out.println("目前无法判断,请输入第二个字母:");
            String str1= input.next();
            char b= str1.charAt(0);
            /*
            char b=' ';
            try{
                b = (char)System.in.read();
            }catch (IOException e){}
            */
            if(a=='T'||a=='t'){
                if(b=='U'||b=='u'){
                    System.out.println("星期二");
                }else if(b=='H'||b=='h'){
                    System.out.println("星期四");
                }else{
                    System.out.println("输入字母匹配不到任意天,请检查。");
                }
            }
            if(a=='S'||a=='s'){
                if(b=='U'||b=='u'){
                    System.out.println("星期日");
                }else if(b=='A'||b=='a'){
                    System.out.println("星期六");
                }else{
                    System.out.println("输入字母匹配不到任意天,请检查。");
                }
            }
        }else{
            System.out.println("输入字母匹配不到任意天,请检查。");
        }
    }
}

 其中注释部分写法有问题,无法正确读入b。原因是b会读入第一次敲得的回车导致结果出错。不知如何解决?

 

27 【程序 27 求素数】
题目:求 100 之内的素数
 

package FindPrimeNumber27;

public class FindPrimeNumber {
    //并输出100以内所有素数。
    public static void main(String[] args){
        int count=0;    //记录素数的个数
        int flag;       //flag为1则不是素数
        int i,j;        //用于for循环
        System.out.println("100以内的素数为:");
        for(i=2;i<=100;i++){
            int max = (int) Math.sqrt(i);
            flag=0;
            for(j=2;j<=max;j++){
                if(i%j==0){
                    flag=1;
                    break;
                }
            }
            if(flag==0){
                System.out.print(i+" ");
                count++;
            }
        }
        System.out.println("共有"+count+"个素数");
    }
}

 

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

package SelectSort28;
import java.util.Scanner;
public class SelectSort {
    //题目:对 10 个数进行排序(选择排序)
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入10个数");
        int[] n = new int[10];
        for(int i=0;i<n.length;i++){       //读入10个数
            n[i] = input.nextInt();
        }
        int min,p=0,temp;     //min记录每趟最小的值,p记录最小值下表,temp用于交换
        for(int j=0;j<n.length-1;j++){        //循环n-1次
            min=n[j];
            for(int k=j+1;k<n.length;k++){     //从j+1开始遍历寻找最小值
                if(n[k]<min){
                    min=n[k];
                    p=k;
                }
            }
            if(p>j){                        //存在n[j]后的数比它小,则交换两者
                temp=n[j];
                n[j]=n[p];
                n[p]=temp;
                p=0;
            }
        }
        for(int i=0;i<n.length;i++){       //输出10个数
            System.out.print(n[i]+" ");
        }
    }
}

 29 【程序 29 求矩阵对角线之和】
题目:求一个 3*3 矩阵对角线元素之和
程序分析:利用双重 for 循环控制输入二维数组,再将 a[i][i]累加后输出。

package RectangleMatrix29;

import java.util.Scanner;
public class RectangleMatrix {
    //题目:求一个 3*3 矩阵对角线元素之和
    public static void main(String[] args){
        System.out.println("请输入一个 3*3 矩阵(行优先)");
        Scanner input = new Scanner(System.in);
        int[][] n = new int[3][3];
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                n[i][j] = input.nextInt();
            }
        }
        int sum=0;
        for(int k=0;k<3;k++){
            sum += n[k][k];
        }
        System.out.println("该矩阵对角线元素之和为:"+sum);
    }
}

30 【程序 30 插入数字】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,
依次后移一个位置。

package InsertNumber30;

import java.util.ArrayList;
import java.util.Scanner;
public class InsertNumber {
    //题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。(递增)
    public static void main(String[] args){
        ArrayList List = new ArrayList();
       // add()是添加一个新的元素, remove()删除一个元素, size()获得ArrayList的长度。
        for(int i=0;i<10;i++){      //初始化数组
            List.add(i);
        }
        System.out.println("初始数组为"+List);
        System.out.println("请输入一个数:");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int length=List.size();
//        if(n>= (int) List.get(length-1)){
//            List.add(n);
//        }
        for(int j=length-1;j>=0;j--){
            if(n < (int) List.get(j))
                continue;
            else{
                List.add(j+1,n);
                break;
            }
        }
        System.out.println("插入"+n+"后数组为"+List);
    }
}

31 【程序 31 数组逆序】
题目:将一个数组逆序输出。
程序分析:用第一个与最后一个交换。

package InvertedSequence31;

public class InvertedSequence {
    //题目:将一个数组逆序输出。
    public static void main(String[] args) {
        int lengh=10;
        int[] n = new int[lengh];
        System.out.print("原数组为:");
        for(int i=0,j=0;j<lengh;i+=2,j++){  //初始化数组
            n[j]=i;
            System.out.print(n[j]+" ");
        }
        int temp;
        for(int k=0;k<=(n.length-1)/2;k++){
            //交换前后两值
            temp = n[k];
            n[k] = n[n.length-1-k];
            n[n.length-1-k] = temp;
        }
        System.out.println();
        System.out.print("逆序数组为:");
        for(int j=0;j<n.length;j++){
            System.out.print(n[j]+" ");     //输出数组
        }
    }
}

32 【程序 32 左移右移】
题目:取一个整数 a 从右端开始的 4~7 位。
程序分析:可以这样考虑:
(1)先使 a 右移 4 位。
(2)设置一个低 4 位全为 1,其余全为 0 的数。可用~(~0<<4)
(3)将上面二者进行&运算。

package LMoveRMove32;

import java.util.Scanner;
public class LMoveRMove {
    //题目:取一个整数 a 从右端开始的 4~7 位。
    public static void main(String[] args){
        System.out.println("请输入一个不小于7位的数:");
        Scanner input = new Scanner(System.in);
        long a = input.nextLong();          //读入a
        String str = Long.toString(a);      //转换成String
        char[] n = str.toCharArray();       //转换成char数组
        int i = n.length;
        if(i<7){
            System.out.println("输入错误!");
        }else{
            for(int j=3;j>=0;j--)
            System.out.print(n[i-j-4]);
        }


    }
}

33 【程序 33 杨辉三角】
题目:打印出杨辉三角形(要求打印出 10 行如下图)
程序分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

package YangHuiTriangle33;

public class YangHuiTriangle {
    //题目:打印出杨辉三角形(要求打印出 10 行如下图)
    public static void main(String[] args){
        int n=10;
        int[][] HY= new int[n][n];
        for(int i=0;i<n;i++){
            //将杨辉三角存入HY二维数组
            for(int j=0;j<=i;j++){
                if(j==0){
                    HY[i][j]=1; //第一列的值均为1
                }else{
                    HY[i][j]=HY[i-1][j]+HY[i-1][j-1];   //每一个值均为上一行同一列的值+上一行左一列的值
                }
            }
        }
        for(int i=0;i<n;i++){
            //输出杨辉三角
            for(int j=1 ;j<n-i;j++){
                System.out.print(" ");
            }
            for(int k=0;k<n;k++){
                if(HY[i][k]>0){
                    System.out.print(HY[i][k]+" ");
                }
            }
            System.out.println();
        }
    }
}

34 【程序 34 三个数排序】
题目:输入 3 个数 a,b,c,按大小顺序输出。
程序分析:利用指针方法。

package Sort34;

import java.util.Scanner;
public class Sort {
    //题目:输入 3 个数 a,b,c,按大小顺序输出。
    public static void main(String[] args){
        System.out.println("请输入三个整数:");
        Scanner input=new Scanner(System.in);
        int a = input.nextInt();
        int b = input.nextInt();
        int c = input.nextInt();
        int max=a>b?(a>c?a:c):(b>c?b:c);
        int medium=a>b?(a<c?a:c):(b<c?b:c);
        int min=a<b?(a<c?a:c):(b<c?b:c);
        System.out.print(max+" "+medium+" "+min);
    }
}

35 【程序 35 最大最小交换】
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

package ChangeMaxMin35;

import java.util.Scanner;
public class ChangeMaxMin {
    //题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
    public static void main(String[] args){
        //读入一个不确定长度的一维数组
        System.out.println("请输入一个数组:");
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();      //读入一行string
        String[] s = str.split("\\s");      //根据空格进行分割
        int[] n = new int[s.length];
        for(int i=0;i<n.length;i++){
            n[i] = Integer.parseInt(s[i]);   //将string转为int型
        }

        int max=0,min=0;    //记录最大值和最小值得下标
        for(int j=0;j<n.length;j++){    //遍历数组,找到最大值和最小值下标
            if(n[j]>n[max]){
                max=j;
            }
            if(n[j]<n[min]){
                min=j;
            }
        }
        int temp;
        //交换时,注意最大最小值出现在两端的情况
        if(max>0){      //若最大值不是第一个,则交换
            temp=n[0];
            n[0]=n[max];
            n[max]=temp;
        }
        if(min==0){     //若最小值是第一个值,则需更新min值,因为最大值已经与第一个值交换。
            min=max;
        }
        if(min<n.length-1){ //若最小值不是最后一个,则交换
            temp=n[n.length-1];
            n[n.length-1]=n[min];
            n[min]=temp;
        }
        for(int i=0;i<n.length;i++){    //输出交换后的数组
            System.out.print(n[i]+" ");
        }
    }
}

36 【程序 36 移动位置】
题目:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数

package MoveNumber36;

import java.util.Scanner;
public class MoveNumber {
    //题目:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入若干个整数:");
        String str = input.nextLine();
        String[] s = str.split("\\s");
        int n = s.length;
        int[] arr = new int[n];
        for(int i=0;i<n;i++){
            arr[i] = Integer.parseInt(s[i]);
        }
        System.out.println("请输入移动的位数:");
        int m = input.nextInt();

        if(m>n){
            System.out.println("移动的位数过大超过数组长度!");
        }
        //辅助数组b,将数组arr的前n-m为存入b中
        int[] b = new int[n-m];
        for(int j=0;j<n-m;j++){
            b[j] = arr[j];
        }

        for(int k=0;k<m;k++){   //后m位数字前移
            arr[k]=arr[k+n-m];
        }
        for(int p=0;p<n-m;p++){ //前n-m位从b中移回arr中
            arr[p+m]=b[p];
        }

        for(int i=0;i<n;i++){   //输出移动后的数组
            System.out.print(arr[i]+" ");
        }
    }
}

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

package CountOff37;

import java.util.ArrayList;
import java.util.Scanner;
public class CountOff {
    //题目:有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,
    //问最后留下的是原来第几号的那位。
    public static void main(String[] args){
        System.out.println("请输入人数:");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        ArrayList list= new ArrayList();    //定义动态数组
        for(int i=1;i<=n;i++){      //将号码存入动态数组list
            list.add(i);
        }
        System.out.println("初始编号为:"+list);
        int length=list.size();
        for(int i=1,j=0;length>1;i++,j=(j+1)%length){
            //i从1-3循环计数,j为动态数组的下标,同步从0一直增加
            if(i==3){                   //数到3时,移除对应的人,同时从1重新数。
                list.remove(j);
                length = list.size();
                i=1;
            }
        }
        System.out.println("最后剩下的人是"+list.get(0));
    }
}

 

38 【程序 38 求字符串长度】
题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度。

package LengthOfString38;

import java.util.Scanner;
public class LengthOfString {
    //题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度。
    public static void main(String[] args){
        System.out.println("请输入一个字符串");
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        System.out.println("该字符串的长度为"+getLength(str));
    }
    private static int getLength(String str){
        return str.length();
    }
}

 

39 【程序 39 分数累加】
题目:编写一个函数,输入 n 为偶数时,调用函数求 1/2+1/4+...+1/n,当输入 n 为奇数时,调用函数
1/1+1/3+...+1/n

package SumOfFraction39;

import java.util.Scanner;
public class SumOfFraction {
    //题目:编写一个函数,输入 n 为偶数时,调用函数求 1/2+1/4+...+1/n,当输入 n 为奇数时,调用函数
    //1/1+1/3+...+1/n
    public static void main(String[] args){
        System.out.print("请输入n:");
        Scanner input = new Scanner(System.in);
        double n = input.nextDouble();
        System.out.print("分数之和为:");
        if(n%2==0){ //n为偶数
            System.out.println(even(n));
        }else{      //n为奇数
            System.out.println(odd(n));
        }
    }
    private static double even(double n){
        double sum = 0;
        for(double i=2;i<=n;i+=2){
            sum += 1/i;
        }
        return sum;
    }
    private static double odd(double n){
        double sum = 0;
        for(double i=1;i<=n;i+=2){
            sum += 1/i;
        }
        return sum;
    }
}

 

40 【程序 40 字符串排序】
题目:字符串排序。

package SortOfString40;

import java.util.Scanner;
public class SortOfString {
    //题目:字符串排序。
    public static void main(String[] args) {
        System.out.print("请输入一个字符串:");
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        System.out.println("排序后的字符串为:"+sort(str));
    }
    private static String sort(String str){
        char[] c = str.toCharArray();
        int L =c.length;
        //采用冒泡排序
        boolean flag;
        char temp;
        for(int i=0;i<L-1;i++){
            flag=false;
            for(int j=L-1;j>0;j--){
                if(c[j-1]>c[j]){
                    temp=c[j];
                    c[j]=c[j-1];
                    c[j-1]=temp;
                    flag=true;
                }
            }
            if(flag==false){
                break;
            }
        }
        //再次将字符数组转换为字符串,也可以直接利用String.valueOf(c)转换
        String str1 = new String(c);
        return str1;
//        String str2 = String.valueOf(c);
//        return str2;
    }
}

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

package MonkeySplitPeach40;

public class MonkeySplitPeach {
    //题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把
    //多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的
    //一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
    public static void main(String[] args) {
        int n=5;            //总共5只猴子
        int i;              //用于for循环
        int x;              //最后一个猴子分到的数目
        double sum;         //每一轮分配前的数目
        for(x=1;;x++){                  //x为最后一个猴子分到的数量,从1开始遍历
            sum = 5*x+1;                //最后一只猴子分配前的总数
            for(i=1;i<n;i++){
                sum = (5.0/4.0)*sum+1;  //上一轮分配前的总数
                if((int)sum != sum){    //若该数不是整数
                    i=1;
                    break;
                }
            }
            if(i==n)
                break;
        }
        System.out.println("最后一个猴子分到的数目:"+x);
        System.out.println("海滩上原来最少有"+(int)sum+"个桃子");
    }
}

42 【程序 42 求数字】
题目: 809*??=800*??+9*??+1
其中??代表的两位数,8*??的结果为两位数, 9*??的结果为 3 位数。求??代表的两位数,及 809*??后的结
果。

package FindNumber42;

public class FindNumber {
    //题目: 809*??=800*??+9*??+1
    public static void main(String[] args) {
        int x=0,i;
        boolean flag=false;
        for(i=10;i<100;i++){
            if(8*i<100 && 9*i>99 ){
                if(809*i==800*i+9*i+1){
                    x=i;
                    flag=true;
                    break;
                }
            }
        }
        if (flag){
            System.out.println("??是"+x);
            System.out.println("809*??="+809*x);
        }else{
            System.out.println("无解");
        }

    }
}

疑问:这个等式显然无解。

43 【程序 43 求奇数个数】
题目:求 0—7 所能组成的奇数个数。

package OddNumber43;

public class OddNumber {
    //题目:求 0—7 所能组成的奇数个数。
    public static void main(String[] args) {
        sum1(8);
        sum2(8);
    }
    private static void sum1(int n){
        //可重复
        int sum = 0,total = 0;
        for(int i=1; i<=n; i++){ //最大位数为8位
            //4*7*8*8*8*8*8*8
            if(i == 1 ){
                total = 4;  // 1,3,5,7
            }else if(i ==2){
                total = total*7;
            }else{
                total *= 8;
            }
            System.out.println("0~7组成" + i + "位数,有:" + total + "个");
            sum += total;
        }
        System.out.println("总计为:" + sum);
    }
    private static void sum2(int n){
        //不可重复
        int sum = 0,total = 0;
        for(int i=1; i<=n; i++){ //最大位数为8位
            //4*6*6*5*4*3*2*1
            if(i == 1 ){
                total = 4;  // 1,3,5,7
            }else if(i ==2){
                total = total*6;
            }else{
                total *= (n+1-i);
            }
            System.out.println("0~7组成" + i + "位数,有:" + total + "个");
            sum += total;
        }
        System.out.println("总计为:" + sum);
    }
}

疑问:不是很懂题目意思??

 

44 【程序 44 偶数的素数和】
题目:一个偶数总能表示为两个素数之和。

package EvenEqualSumOfPrime44;

import java.util.Scanner;
import java.util.ArrayList;
public class EvenEqualSumOfPrime {
    //题目:一个偶数总能表示为两个素数之和。
    public static void main(String[] args) {
        System.out.print("请输入一个偶数:");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        //用动态数组x,y记录分解的素数,因为有多种可能
        ArrayList x = new ArrayList();
        ArrayList y = new ArrayList();
        for(int i=2;i<=n/2;i++){
            if(IsPrime(i)){
                int j=n-i;
                if(IsPrime(j)){     //符合条件则加入数组x,y;
                    x.add(i);
                    y.add(j);
                }
            }
        }
        for(int k=0;k<x.size();k++){    //输出结果
            System.out.println(n+"="+x.get(k)+"+"+y.get(k));
        }
    }

    private static boolean IsPrime(int n){  //判断n是否是素数
            int max = (int) Math.sqrt(n);
            int flag=0;
            for(int j=2;j<=max;j++){
                if(n%j==0){
                    flag=1;
                    break;
                }
            }
            if(flag==0){
                return true;
            }
            return false;
    }
}

 

45 【程序 45 被 9 整除】
题目:判断一个素数能被几个 9 整除

package DivideByNine45;

import java.util.Scanner;
public class DivideByNine {
    public static void main(String[] args) {
        System.out.print("请输入一个素数:");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        if(IsPrime(n)==false){
            System.out.println("您输入的数不是素数,请重新输入");
        }else{
            if(count(n)==0){
                System.out.println(n+"不能被9整除");
            }else{
                System.out.println(n+"能被"+count(n)+"个9整除");
            }
        }
    }
    private static boolean IsPrime(int n){  //判断n是否是素数
        int max = (int) Math.sqrt(n);
        int flag=0;
        for(int j=2;j<=max;j++){
            if(n%j==0){
                flag=1;
                break;
            }
        }
        if(flag==0){
            return true;
        }
        return false;
    }

    private static int count(int n){    //被9整除的个数
        int count=0;
        while(n%9==0){
            n=n/9;
            count++;
        }
        return count;
    }
} 

疑问:素数怎么可能被9整除??

 46 【程序 46 字符串连接】
题目:两个字符串连接程序

package ConnectTwoString46;


import java.util.Scanner;
public class ConnectTwoString {
    //题目:两个字符串连接程序
    public static void main(String[] args) {
        System.out.println("请输入两个字符串:");
        Scanner input = new Scanner(System.in);
        //读入两个字符串
        String str1 = input.nextLine();
        String str2 = input.nextLine();
        //字符串转换为字符数组
        char[] c1 = str1.toCharArray();
        char[] c2 = str2.toCharArray();
        char[] c = new char[c1.length+c2.length];   //用于存放连接的字符数组
        for(int i=0;i<c1.length;i++){
            c[i]=c1[i];
        }
        for(int j=0;j<c2.length;j++){
            c[j+c1.length]=c2[j];
        }
        //将连接后的新字符数组转换成字符串,输出
        String str = new String(c);
        System.out.println("连接后的字符串为:"+str);
    }
}

47 【程序 47 打印星号】
题目:读取 7 个数( 1—50)的整数值,每读取一个值,程序打印出该值个数的*。

package PrintStar47;

import java.util.Scanner;
public class PrintStar {
    //题目:读取 7 个数( 1—50)的整数值,每读取一个值,程序打印出该值个数的*。
    public static void main(String[] args) {
        System.out.println("请输入七个(1--50)整数:");
        Scanner input = new Scanner(System.in);
        int n;
        for(int i=0;i<7;i++){
            n = input.nextInt();
            for(int j=0;j<n;j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }

}

48 【程序 48 加密】
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密
规则如下:每位数字都加上 5,然后用和除以 10 的余数代替该数字,再将第一位和第四位交
换,第二位和第三位交换。

package Encryption48;

import java.util.Scanner;
public class Encryption {
    //题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密
    //规则如下:每位数字都加上 5,然后用和除以 10 的余数代替该数字,再将第一位和第四位交
    //换,第二位和第三位交换。
    public static void main(String[] args) {
        System.out.println("请要传递的四位整数:");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[] a = {n/1000,n/100%10,n%100/10,n%100}; //将n的各位存入a数组
        for(int i=0;i<a.length;i++){    
            //加密
            a[i] = (a[i]+5)%10;
        }
        //交换一四位,二三位
        int temp;
        temp=a[0];
        a[0]=a[3];
        a[3]=temp;
        temp=a[1];
        a[1]=a[2];
        a[2]=temp;
        //输出加密后的数字
        System.out.print("加密后的数字为");
        //int n1=0;
        for(int j=0;j<a.length;j++){
            //n1 =  n1 + a[j]*(int)Math.pow(10,a.length-1-j);
            System.out.print(a[j]);
        }
        //System.out.println(n1);
    }
}

49 【程序 49 子串出现的个数】
题目:计算字符串中子串出现的次数

package SubstringNumber49;

import java.util.Scanner;
public class SubstringNumber {
    //题目:计算字符串中子串出现的次数
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个整串:");
        String str1= input.nextLine();
        System.out.println("请输入一个子串:");
        String str2= input.nextLine();
        System.out.println("字符串中子串出现的次数为:"+count(str1,str2));
        System.out.println("字符串中子串出现的次数为:"+count2(str1,str2));
    }
    //方法一:采用split
    private static int count(String str1,String str2){  //str1为整串,str2位子串
        str1 = " "+str1+" ";        //母串两端补空格,防止子串出现在两端时计数出错。
        String[] c = str1.split(str2);
        return c.length-1;
    }
    //方法二:利用indexOf
    private static int count2(String str1,String str2){  //str1为整串,str2位子串
        int count=0;
        int d=0;
        if(str1.contains(str2)==false){
            count=0;
        }else{
            while((d=str1.indexOf(str2,d))!=-1){        //匹配到子串
                str1 = str1.substring(d+str2.length()); //得到匹配子串位置后面的字符串
                count++;
            }
        }
        return count;
    }
}

50 【程序 50 文件 IO】
题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),
计算出平均成绩, 将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。

package FileIO50;

import java.io.*;
public class FileIO {
    //题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),
    //计算出平均成绩, 将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
    //定义学生模型
    String[] number = new String[5];
    String[] name = new String[5];
    float[][] grade = new float[5][3];
    float[] sum = new float[5];
    public static void main(String[] args) {
        FileIO stud = new FileIO();
        try {
            stud.input();
            stud.output();
        }catch(IOException e){}
    }

    //输入学号、姓名、成绩
    void input() throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try{
            for(int i=0;i<5;i++){
                System.out.print("请输入学号:");
                number[i] = br.readLine();
                System.out.print("请输入姓名:");
                name[i] = br.readLine();
                for(int j=0;j<3;j++){
                    System.out.print("请输入第"+(j+1)+"门课成绩:");
                    grade[i][j] = Integer.parseInt(br.readLine());
                }
                System.out.println();
                sum[i] = grade[i][0]+grade[i][1]+grade[i][2];
            }
        }catch(NumberFormatException e){
            System.out.println("请输入一个数字!");
        }
    }

    //输出文件
    void output() throws IOException{
        FileWriter fw = new FileWriter("stud.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write("学号"+"\t"+"姓名"+"\t"+"成绩1"+"\t"+"成绩2 "+"\t"+"成绩3 "+"\t"+"平均成绩");
        bw.newLine();
        for(int i=0;i<5;i++){
            bw.write(number[i]+"\t");
            bw.write("  "+name[i]+"\t");
            for(int j=0;j<3;j++)
                bw.write("  "+grade[i][j]+"\t");
            bw.write("  "+(sum[i]/3)+"\t");
            bw.newLine();
        }
        bw.close();
    }
}

  

 

 

 

 

}
posted @ 2019-01-03 22:36  一乐one  阅读(673)  评论(0编辑  收藏  举报