《Java练习题》习题《代码+答案》

有些题目自己写出来了,有些借鉴的之前发布的集题里的答案,如有做的不好的地方欢迎指出

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

        System.out.print("请输入你想知道的兔子数量的月份:");

	        Scanner scanner=new Scanner(System.in);

	        int n=scanner.nextInt();//获取输入的整数

	        System.out.println(test(n));

	        System.out.println(fun(n));

	        scanner.close();

/**
	     * 兔子产仔菜鸟写法
	     * @param i
	     * @return
	     */
	    public static int test(int i){
	        int tot = 0;
	        int a = 0;
	        int b = 1;
	        for(int j = 0;j<i; j++){
	            tot = a+b;
	            a = b;
	            b = tot;
	        }
	        return a;
	    }

	    /**
	     * 兔子产仔大神写法
	     * @param
	     * @return
	     */
	    private static int fun(int n){
	        if(n==1 ||n==2)
	            return 1;
	        else
	            return fun(n-1)+fun(n-2);
	    }

运行截图:

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

			int j =0;
			System.out.print("所有素数为:");
			for(int i =101;i<=200;i++) {
				if(isPrimeNumber(i)) {
					System.out.print(i+",");
					j++;
				}
				
			}

运行截图(输出最后一个多了个,号,本人无强迫症,哈哈):

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

	        System.out.print("所有的水仙花数为:");
			for(int i =100;i<=999;i++) {
				if(number(i)) {
					System.out.print(i+",");
				}
			}

	    private static boolean number(int i) {
	    	
	    	//百位
	    	int num1 = i/100;
	    	//十位
	    	int num2 = (i-num1*100)/10;
	    	//个位
	    	int num3 = (i-num1*100-num2*10);
		    	if(Math.pow(num1,3)+Math.pow(num2,3)+Math.pow(num3,3) != i){
		    		return false;
		    	}
		    return true;
	    }

运行截图(输出最后一个多了个,号,本人无强迫症,哈哈):

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

		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个正整数");
	    int a = scanner.nextInt();
		decompose(a);

	    private static void decompose(int num){
	        int tmp = num/2;
	        for(int i=2;i <= tmp ;i++){
	            if(num%i == 0){
	                num = num/i;
	                System.out.println("质因数为:"+i);
	                i=1;
	            }
	        }
	    }

运行截图:

 

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

		Scanner scanner = new Scanner(System.in);
			System.out.println("请输入一个学生成绩");
			int a = scanner.nextInt();
			String b=a>=90?"此同学成绩为A":a>=60&&a<=80?"此同学成绩为B":a>=30&&a<60?"此同学成绩为C":"此同学成绩为D";
			System.out.println(b);

运行截图:

题目六:输入两个正整数a和b,求其最大公约数和最小公倍数。

		Scanner scanner=new Scanner(System.in);
                System.out.println("请输入一个数");
		int a = scanner.nextInt();
		System.out.println("请再输入一个数");
		int b = scanner.nextInt();
		decompose1(a,b);


	    private static void decompose1(int num,int num1){
	    	int tmp = 0;
	    	for(int i=2;i>0;i++) {
				if(num*i%num1==0) {
					System.out.println("最小公倍数为"+num*i);
					break;
				}
			}
	        for(int i=2;i <= num+num1 ;i++){
	            if(num%i == 0&&num1%i==0){
	            	tmp=i;
	            }
	            if(i==num+num1&&tmp>0) {
	            	System.out.println("最大公约数为:"+tmp);
	            }
	        }
	        if(tmp==0) {
            	System.out.println("没有公约数");
            }
	    }

运行截图:

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

	        Scanner scanner=new Scanner(System.in);
           //排除输入空格问题
		scanner.useDelimiter("\n");
	        System.out.println("请输入一行字符");
		String a= scanner.next();
		fenge(a);


	    public static void fenge(String str){
	        char[] strArr = str.toCharArray();
	        int num1 = 0;  //字母
	        String num1Str = "";
	        int num2 = 0;  //数字
	        String num2Str = "";
	        int space = 0; //空格
	        String spaceStr = "";
	        int other = 0; //其他
	        String otherStr = "";
	        for (int i = 0; i < strArr.length ; i++) {
	        	//将char数组元素转换为int数字
	            int ascii = (int)strArr[i];
	            //如果这个数字大于等于48并且小于等于57那么类型为数字
	            if( 48<= ascii && ascii <= 57){
	                num2 = num2 + 1;
	                num2Str = num2Str +strArr[i] +" ";
		            //如果这个数字等于32那么类型为空格
	            }else if(ascii == 32){
	                space = space +1;
		            //如果这个数字大于等于65并且小于等于90或者大于等于97并且小于等于122那么类型为字母
	            }else if((65<= ascii && ascii <= 90) || (97 <= ascii && ascii <=  122)){
	                num1 = num1 + 1;
	                num1Str = num1Str +strArr[i] +" ";
	                //上面的判断都不成立则为其它标点符号
	            }else{
	                other = other + 1;
	                otherStr = otherStr +strArr[i] +" ";
	            }
	        }
	        System.out.println("存在字母个数:" + num1);
	        System.out.println("存在字母如下:" + num1Str);

	        System.out.println("存在数字个数:" + num2);
	        System.out.println("存在数字如下:" + num2Str);

	        System.out.println("存在空格个数:" + space);

	        System.out.println("存在其他个数:" + other);
	        System.out.println("存在其他如下:" + otherStr);

	    }

运行截图:

题目八:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
             例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。输出结果的形式如:2+22+222=246

		System.out.println("请输入第一个数字:");
		int a = scanner.nextInt();
		System.out.println("请输入第二个数字");
		int b = scanner.nextInt();
		String c ="";
		int d =0;
		for(int i =1;i<=a;i++) {
			for(int j =1;j<=i;j++) {
				c+=String.valueOf(b);
			}
			if(i==a) {
				System.out.print(c);
			}else {
				System.out.print(c+"+");
			}
			d+=Integer.parseInt(c);
			c="";
		}
		System.out.println("="+d);

运行截图:

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

private static void wannum() {
	    	 int a =0;
	 		for (int i = 1; i <= 1000; i++) {
	 			
	 				for(int j = 1;j<i;j++) {
	 					if(i%j==0) {
	 						a+=j;
	 					}
	 				}
	 			
	 			
	 			if(a==i) {
	 				System.out.println("1000以内的所有完数为:"+i);
	 				a=0;
	 			}else {
	 				a=0;
	 			}
	 		}
	     }

运行截图:

题目十:一球从100米高度自由落下,每次落地后反跳回原高度的一半;n次落地经过路线总长度和下次反弹的高度。

		System.out.println("请输入球第几次落地:");
		int a = scanner.nextInt();
		ball(a);


      private static void ball(int a) {
	 		//高度
	 		double d =100.0;
	 		//总长度
	 		double b =0.0;
	 		//下次反弹的高度
	 		double c = 0.0;
	 		for(int i = 1;i<=a;i++) {
	 			if(i==1) {
	 				b+=d;
	 				c=d/2;
	 			}else {
					b+=c*2;
					c=c/2;
	 			}
	 		}
	 		System.out.println("总运动距离为:"+b);
	 		System.out.println("下一次反弹高度为:"+c);
	     }

运行截图:

 

  • 10
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡广毕业设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值