java基础编程练习题及解答

来源:互联网 发布:阿洋个人发卡平台源码 编辑:程序博客网 时间:2024/05/29 09:13

java基础编程练习题及解答

虽然说这些题目好多人做过,但是也考考自己对编程的解决方法吧,不对的地方希望大家私信我,谢谢!!!

实例1:

/*题目:判断101-200之间有多少个素数,并输出所有素数。 素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。*/import java.util.Arrays;public class HelloWorld {    public static void main(String []args) {        //计算质子个数,与非质子个数        int indexs = 0;        int index = 0;        for(int i=101;i<=200;i++){            if((i%2!=0)&(i%3!=0)&(i%5!=0)&(i%7!=0)){                indexs++;                      }else{                index++;            }        }        System.out.println(indexs);        System.out.println(index);        int[] nums = new int[indexs];        int[] num = new int[index];        int x = 0;        int y = 0;        for(int i=101;i<=200;i++){            if((i%2!=0)&(i%3!=0)&(i%5!=0)&(i%7!=0)){                nums[x] = i;                x++;                   }else{                num[y] = i;                y++;            }        }        System.out.println(Arrays.toString(nums));        System.out.println(Arrays.toString(num));    }}

实例2:

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。想当年,做这些题都是网上找答案,如今事过境迁,不会也得会。package test;public class demo1 {    public static void main(String[] args) {        //定义个位,十位,百位        int a,b,c;        int sum,mul;        for(int i=100;i<=999;i++){            a = i/100;            b = (i-a*100)/10;            c = (i-a*100-b*10);            sum = a*a*a+b*b*b+c*c*c;            mul = a*100+b*10+c;            if(sum == mul){                System.out.println(a+""+b+""+c);            }        }    }}

实例3:

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。原谅我,这题我作弊了,哈哈,做的时候有点懵逼啊。但是最后我还是靠自己 又写出一遍来,哈哈。。。package test;import java.util.Scanner;public class demo2 {    public static void main(String[] args) {        //匹配数字正则        String reg = "[1-9]\\d{0,}";        @SuppressWarnings("resource")        //创建扫描器对象        Scanner scanner = new Scanner(System.in);        System.out.println("请输入一个正整数:");        //循环        while(true){            String str = scanner.next();            //String强制转换int            int num = Integer.parseInt(str);            //匹配数字            if(str.matches(reg)){                System.out.println("合法数字");                if(num!=1){                    System.out.print(num + "是有效的被分解数");                    int index = 2;                    if(num == 2){                        System.out.println(num+"分解后的质因数为: 1*"+num);   //如果输入的是最小质数2                    }else{                        System.out.print(num+"分解后的质因数为: 1"); //1是所有的正整数的质数                             while(num>=index){   //输入的数可以被k整除                               if(num%index==0){                                 System.out.print("*"+index);           //将k添加到结果中                                 num = num/index;//除以最小质数后重新循环                                 }else{                                 index++;                                 } //if                            } //while                    }//if                }else{                    System.out.print(num + "是无效的被分解数");                }//if            }else{                System.out.println("非法数字");            }//if        }//while    }}

实例4:

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 package test;import java.util.Scanner;public class demo3 {    public static void main(String[] args) {        @SuppressWarnings("resource")        Scanner scanner = new Scanner(System.in);        while(true){            System.out.println("请输入成绩");            int score = scanner.nextInt();            if((score >= 90)&(score<100)){                System.out.println("A");            }else if((score >= 60)&(score<89)){                System.out.println("B");            }else if((score >= 0)&(score<59)){                System.out.println("C");            }else{                System.out.println("恭喜你,你的成绩不合理");            }        }    }}

实例5:

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。方法1:package test;import java.util.Scanner;public class demo4 {    @SuppressWarnings("unused")    public static void main(String[] args) {        //计算字母,空格,数字,其他字符个数        int abcCount = 0;        String abcreg = "[a-zA-Z]";        int spaceCount = 0;        int numCount = 0;        String numreg = "[0-9]";        int otherCount = 0;        @SuppressWarnings("resource")        Scanner scanner = new Scanner(System.in);        String str = scanner.nextLine();        char[] ch = str.toCharArray();        for(int i=0;i<ch.length;i++){            if((""+ch[i]).matches(abcreg)){                abcCount++;            }else if((""+ch[i]).matches(abcreg)){                spaceCount++;            }else if((""+ch[i]).matches(numreg)){                numCount++;            }else{                otherCount++;            }        }        System.out.println("字母个数:"+abcCount);          System.out.println("数字个数:"+numCount);          System.out.println("空格个数:"+spaceCount);          System.out.println("其他字符个数:"+otherCount);     }}方法2:    import java.util.Scanner;      public class Example {          public static void main(String[] args) {              // TODO Auto-generated method stub              int abcCount=0;//英文字母个数              int spaceCount=0;//空格键个数              int numCount=0;//数字个数              int otherCount=0;//其他字符个数              Scanner scan=new Scanner(System.in);              String str=scan.nextLine();              char[] ch = str.toCharArray();              for(int i=0;i<ch.length;i++){              if(Character.isLetter(ch[i])){              //判断是否字母              abcCount++;              }              else if(Character.isDigit(ch[i])){              //判断是否数字              numCount++;              }              else if(Character.isSpaceChar(ch[i])){              //判断是否空格键              spaceCount++;              }              else{              //以上都不是则认为是其他字符              otherCount++;              }              }              System.out.println("字母个数:"+abcCount);              System.out.println("数字个数:"+numCount);              System.out.println("空格个数:"+spaceCount);              System.out.println("其他字符个数:"+otherCount);              }      }  说说我在方法1遇到的困难:1.一开始ch[i]匹配正则的时候总是给我报错,但是我知道ch[i]是没有错的,我也把它强制转换为String类型,但是各种报错使得我想方法使它能变成String类型,于是在前面加了一个"",会自动编译成String类型。2.当我匹配空格的时候,发现会自动停止,就是计算不了空格的个数,还会使程序停止,这肯定是不行的,所以我百度了下,原来是出问题在nextInt(),nextLine(),next()获取值上。next()  以空格作为分隔符nextLine()  以行作为分隔符3.完成了方法1后,方法2就简单了,于是就是Character.is...()判断一下就行了。

实例6:

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 package test;import java.util.Scanner;import static java.lang.Math.pow;  public class demo6 {    public static void main(String[] args) {        String reg = "\\d";        @SuppressWarnings("resource")        Scanner scanner = new Scanner(System.in);        while(true){            int num = scanner.nextInt();            int nums = scanner.nextInt();            if ((""+num).matches(reg)) {                num = Sum(num,nums);                System.out.println(num);            }else{                System.out.println("请输入一个数字");            }        }    }//  @SuppressWarnings("unused")     public static int Sum(int num,int nums){          int total = 0;          int count=0;          int nowData = 0;          int lastData = 0;          while(count < nums){              nowData = num * (int)pow(10,count++) + lastData;              total = total + nowData;              lastData = nowData;              System.out.println(nowData);          }          return total;       }}

实例7:

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

实例8:

package test;/*题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?因为最后的高度小于1,所以把int类型改为double类型*/public class demo8{    public static void main(String[] args) {        //球的高度        double height = 100;        //经历的距离        double sum = 0;        for(int index = 1;index<=10;index++){            sum += height;            System.out.println("第"+index+"次落地高度" + height + "米经过"+sum+"米");            height = height/2;            sum += height;            System.out.println("第"+index+"次落地后反跳回" + height + "米经过"+sum+"米");        }    }}

实例9:

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

实例9:

package test;import java.util.Scanner;/*题目:企业发放的奖金根据利润提成。利润(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 class demo10 {    public static void main(String[] args){          @SuppressWarnings("resource")        Scanner scanner = new Scanner(System.in);          double profit = scanner.nextDouble();          double money = 0;          if(profit <= 100000){              money = profit * 0.1;          }else if(profit < 200000){              money = 100000 * 0.1 + (profit - 100000) * 0.075;          }else if(profit < 400000){              money = 200000 * 0.1 + (profit - 200000) * 0.05;          }else if(profit < 600000){              money = 400000 * 0.1 +(profit - 400000) * 0.03;          }else if(profit < 1000000){              money = 600000 * 0.1 +(profit - 600000) * 0.15;          }else{            money = 1000000 * 0.1 +(profit - 1000000) * 0.01;          }        System.out.println(money);      }  }

实例10:

package test;import java.util.Scanner;/*一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少 sqrt(156+100)=16 sqrt(156+1168)=18 */  public class demo11 {    public static void main(String[] args) {        @SuppressWarnings({ "resource", "unused" })        Scanner scanner = new Scanner(System.in);        int num=0;        System.out.println(Math.sqrt(156+100));        System.out.println(Math.sqrt(156+168));        while(true){            if((Sqrt(num+100) == true)&&(Sqrt(num+168) == true)){                System.out.println(num);                break;            }            num++;        }    }    public static boolean Sqrt(int num){        if((int)Math.sqrt(num)*(int)Math.sqrt(num)==num){            return true;        }else{            return false;        }    }}

实例11:

package test;import java.util.Scanner;/*题目:输入三个整数x,y,z,请把这三个数由小到大输出。 */public class demo12 {    public static void main(String[] args) {        @SuppressWarnings("resource")        Scanner scanner = new Scanner(System.in);        while(true){            int temo = 0;            int x = scanner.nextInt();            int y = scanner.nextInt();            int z = scanner.nextInt();            if(x>y){                temo=x;                x=y;                y=temo;            }            if(x>z){                temo=x;                x=z;                z=temo;            }            if(y>z){                temo=y;                y=z;                z=temo;            }System.out.println(x+""+y+""+z);        }    }}

实例12:

package test;import javax.security.auth.Subject;/*题目:输出9*9口诀。 */public class demo13 {    public static void main(String[] args) {        int i,j,Sub;        for(i=1;i<10;i++){            for(j=1;j<10;j++){                Sub = i*j;                System.out.print(i+"*"+j+"="+Sub+"\t");            }            System.out.println("");        }    }}

实例13:

package test;import java.util.Scanner;/*题目:输入某年某月某日,判断这一天是这一年的第几天? */public class demo14 {    @SuppressWarnings("unused")    public static void main(String[] args) {        int year,month,day;        int[] data = {31,28,31,30,31,30,31,31,30,31,30,31};        @SuppressWarnings("resource")        Scanner scanner = new Scanner(System.in);        System.out.print("请输入年份:");        year = scanner.nextInt();        System.out.print("请输入月份:");        month = scanner.nextInt();        System.out.print("请输入几号:");        day = scanner.nextInt();        int sum = 0;        for(int i=0;i<month-1;i++){            sum += data[i];        }        if ((year%400==0||(year%4==0&&year%100!=0))&&(month>2)){            sum += 1;        }        System.out.println(sum+day);    }}

实例14:

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

实例15:

package test;/*题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。*/public class demo16 {    public static void main(String[] args) {        for(char i ='x';i<='z';i++){            for(char j ='x';j<='z';j++){                if(i!=j)//这里放一个判断,比赛队员不能重复比赛,判断写在外面又可以减少循环次数                    for(char k = 'x';k<='z';k++){                        if(i!=k&&j!=k)//同上,排除相同                            if(i!='x'&&k!='x'&&k!='z')//这里根据题意排除掉不符合的名单                                System.out.println("a和"+i+"\n"+"b和"+j+"\n"+"c和"+k+"\n");                    }            }        }    }}

实例16:

package test;/*题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。*/public class demo17 {    public static void main(String[] args) {        double[] a = new double[20];        double up=2;        double down=1;        double time = 0;        for(int i=0;i<20;i++){            a[i] = up/down;            time = down;            down=up;            up=time+down;            System.out.println(a[i]);        }     }}

实例17:

package test;import java.util.Scanner;/*题目:求1+2!+3!+...+20!的和 */public class demo18 {    public static void main(String[] args) {        //计算总值        int amount = 0;        //阶乘数        int sum = 0;        @SuppressWarnings("resource")        Scanner scanner = new Scanner(System.in);        System.out.println("请输入阶乘数:");        int num = scanner.nextInt();        for(int i=1;i<=num;i++){            sum = jiecheng(i);            if(i<num){                System.out.print(i+"!+");            }else{                System.out.print(i+"!=");            }            amount += sum;        }        System.out.println(amount);    }    //处于每个阶乘返回的值    public static int jiecheng(int num){        int sum = 1;        for(int i=1;i<=num;i++){            sum *= i;        }        return sum;    }}

实例18:

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