Java基础语法八(例题2续)

求出1000以内的所有完数。

一个数如果恰好等于它的所有真因子(即除了自身外的所有因数)之和,这个数称为“完数”。

求因子就想到了i取余为0,直接两层for循环即可,外边一层规定这个数在1000以内,里边一层就是在判定条件 i%j==0 的情况下把 j 累加起来,看是否等于 i 本身

ss.substring(0,ss.length()-1) 就是截取一段字符串,其范围就是从0到数组长度-1 。

为什么要截取这一段呢?就是为了不用输出“1+2+3+=6是完数”这一结果。

public class Test1{
    public static void main(String[] args){
        for(int i=1;i<=1000;i++){
            int cc=0;
            String ss="";
            for(int j=1;j<=i;j++){
                if(i%j==0){
                    cc+=j;
                    ss+=j+"+";
                }
            }
            if(i==cc){
                ss=ss.substring(0,ss.length()-1)+"="+cc;
                System.out.println(ss+"是完数!");
            }
        }
    }
}
输出结果:
1+2+3=6是完数!
1+2+4+7+14=28是完数!
1+2+4+8+16+31+62+124+248=496是完数!

有1、2、3、4一共四个数字,能组成多少个不相等且无重复数字的三位数?和是多少?

看问题就知道一个三位数中无重复且不相等的判定条件就是各个位数的数字互不相等。直接套三层循环,分别代表三位数中的各个位数。完了直接输出结果即可。

public class Test2{
    public static void main(String[] args){
        int count=0;
        String cc="";
        int sum=0;
        for(i=1;i<=4;i++){
            for(j=1;j<=4;j++){
                for(int k=1;k<=4;k++){
                    if(i!=j&&j!=k&&k!=i){
                        System.out.println(i+""+j+""+k+"\t");
                        cc+=(i+""+j+""+k+"+");
                        count++;
                        sum+=(i*100+j*10+k);
                        if(count%6==0){
                            System.out.println();
                        }
                    }
                }
            }
        }
        cc=cc.substring(0,cc.length()-1)+"="+sum;
        System.out.println("\n"+cc);
        System.out.println("有1、2、3、4一共四个数字,能组成不相等且无重复数字的三位数为 "+count+" 个");
    }

}

键盘录入一个正整数,求:1、它是几位数?2、逆序打印出数字

键盘录入需要Scanner,正整数还需while循环来解决。再然后看题干,几位数?这怎么解决呢?用字符串就可以,你输入几位数就是字符串的长度。再看逆序打印,直接用一个for循环和一个ss.charAt(i)的方法,ss.charAt(i)是获取指定下标位置 i 上的字符

import java.util.Scanner;
public class Test3{
    public static void main(String[] args){
        int k=1;
        String kk="";
        Scanner sc = new Scanner(System.in);
        System.out.println("输入一个正整数:");
        int i=0;
        while(true){
            kk=sc.nextLine();
            k=Integer.parseInt(kk);
            if(i<1){
                System.out.println("输入的数据不合法!");
            }else{
                break;
            }
        }
        String cc="";
        for(int i=kk.length()-1;i>=0;i++){
            cc+=kk.charAt(i);
        }
        System.out.println(k + "是" + kk.length() + "位数");
        System.out.println(k + "的逆序为" + cc);
		sc.close();
    }
}

有一分数序列:2/13/25/38/513/821/13。求出这个数列的前20项之和。

类似于斐波那契数列

public class Test4 {

	public static void main(String[] args) {
		// 8、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13。
		// 求出这个数列的前20项之和。
		// 答案是 32.66026079864164
		int n1 = 2;
		int n2 = 3;
		int n = 0;

		int n3 = 1;
		int n4 = 2;
		int m = 0;

		double sum = 1. * n1 / n3 + 1. * n2 / n4;

		for (int k = 3; k <= 20; k++) {
			n = n1 + n2;
			n1 = n2;
			n2 = n;

			m = n3 + n4;
			n3 = n4;
			n4 = m;

			sum += 1. * n / m;
//			System.out.println(n + "/" + m);
		}
		System.out.println(sum);
	}

}

一个整数,它加上100或者268后都是一个完全平方数,请问在1万以内,这样的数有几个,分别是多少?

做这道题的思路就是你先随便给一个数据,例如:10,你看10+100或者10+268;21,你看100+21或者21+268这两个数,10就不是,21就是。完了直接按思路看一下根号下(10+100)或者根号下(10+268)取得值的平方是否为原来的数字,不是输出结果不是平方数,是就直接输出是平方数即可。再用一个for循环,看1万以内有多少个这样的数就行

public class Test5 {

	public static void main(String[] args) {
		// 9、一个整数,它加上100或者268后都是一个完全平方数,请问在1万以内,这样的数有几个,
		// 分别是多少?
//		int i = 10;
//		boolean flag = false;
//		for (int j = 1; j < i; j++) {
//			if (j * j == i) {
//				flag = true;
//				break;
//			}
//		}
//		if (flag)
//			System.out.println("是平方数");
//		else
//			System.out.println("不是平方数");

		int count = 0;
		for (int k = 1; k < 10000; k++) {
			int k1 = k + 100;
			boolean bb1 = false;
			int dd = (int) Math.sqrt(k1);
			if (Math.pow(dd, 2) == k1)
				bb1 = true;
			int k2 = k + 268;
			boolean bb2 = false;
			dd = (int) Math.sqrt(k2);
			if (Math.pow(dd, 2) == k2)
				bb2 = true;

			if (bb1 || bb2) {
				System.out.print(k + "\t");
				count++;
				if (count % 6 == 0)
					System.out.println();
			}
		}
		System.out.println("\n一个整数加上100或者268后都是一个完全平方数,在1万以内,这样的数有" + count + "个");

	}
}

编写程序数一下 1 100 的所有整数中出现多少个数字9

有两种方法,一种直接定义一个count,在个位数和十位数中出现9就count++,输出结果就行;另一种就是把1到100的数定义成字符串,直接用方法 int pos = ss.indexOf("9");// ss.indexOf()查找指定字符, 查找所有“9”出现的位置并打印出来

public class Test6 {

	public static void main(String[] args) {
		// 11、编写程序数一下1到100的所有整数中出现多少个数字9
//		int count = 0;
//		for (int i = 1; i < 100; i++) {
//			int shi = i / 10;
//			int ge = i % 10;
//			if (shi == 9){
//		        System.out.println(i);
//				count++;}
//			if (ge == 9){
//		        System.out.println(i);
//				count++;}
//		}
//		System.out.println(count);

		String ss = "";
		for (int i = 1; i < 100; i++) {
			ss += i;
		}
		int count = 0;
		// 查找所有“9”出现的位置并打印出来
		int pos = ss.indexOf("9");// ss.indexOf()查找指定字符
		while (pos != -1) {
			count++;
			pos = ss.indexOf("9", pos + 1);

		}
		System.out.println(count);
	}

}

打印用“*”组成的X形图案

跟杨辉三角类似

import java.util.Scanner;

public class Test7 {

	public static void main(String[] args) {
		// 打印X图案
		Scanner sc = new Scanner(System.in);
		System.out.println("输入行数:");
		int k = sc.nextInt();
//		int k = 3;// k是行数
		// i是行号
		for (int i = k; i >= 1; i--) {
			for (int m = 1; m <= k - i; m++)
				System.out.print(" ");
			System.out.print("*");
			for (int m = 1; m <= 2 * (i - 1); m++)
				System.out.print(" ");
			System.out.println("*");
		}
		for (int i = 1; i <= k; i++) {
			for (int m = 1; m <= k - i; m++)
				System.out.print(" ");
			System.out.print("*");
			for (int m = 1; m <= 2 * (i - 1); m++)
				System.out.print(" ");
			System.out.println("*");
		}
        sc.close();
	}

}

输出结果:

 

 

完成猜数字游戏 ,用户输入数字,判断该数字是大于,小于,还是等于随机生成的数字,等于的时候退出程序。

import java.util.Scanner;

public class Test8 {
	public static void main(String[] args) {
		// 完成猜数字游戏 ,用户输入数字,判断该数字是大于,小于,
		// 还是等于随机生成的数字,等于的时候退出程序。
		int target = (int) (Math.random() * 100 + 1);
		int count = 0;
		Scanner sc = new Scanner(System.in);
		System.out.println("输入数字:");
		while (true) {
			int tt = sc.nextInt();
			if (tt > target) {
				System.out.println("大了!");
				count++;
			} else if (tt < target) {
				System.out.println("小了!");
				count++;
			} else {
				System.out.println("对了!");
				count++;
				break;
			}
		}
		// 1、需要统计猜数次数。根据猜测次数进行评价
		if (count <= 5)
			System.out.println(count + "次,你是一个天才!");
		else if (count <= 10)
			System.out.println(count + "次,还行,没无可救药。");
		else
			System.out.println(count + "次,菜的一批!");
		sc.close();
	}
}

计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值

public class Test9 {

	public static void main(String[] args) {
		// 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
		double sum = 0;
//		double b = 1.0;
//		while (b <= 100) {
//			if (b % 2 == 0)
//				sum += -(1.0 / b);
//			else
//				sum += (1.0 / b);
//			b++;
//		}

		// for
//		for (double b = 1.0; b <= 100; b++) {
//			if (b % 2 == 0)
//				sum += -(1.0 / b);
//			else
//				sum += (1.0 / b);
//		}
//		System.out.println(sum);

		// 另一种写法
		boolean flag = true;
		for (int i = 1; i < 101; i++) {
			if (flag) {
				sum += (1.0 / i);
			} else {
				sum -= (1.0 / i);
			}
			flag = !flag;//
		}
		System.out.println(sum);

	}

}

编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示登录成功”,密码错误,可以重新输 入,最多输入三次。三次均错,则提示退出程序

import java.util.Scanner;

public class Test10 {

	public static void main(String[] args) {
		// 编写代码模拟三次密码输入的场景。 最多能输入三次密码,
		// 密码正确,提示“登录成功”,密码错误,
		// 可以重新输入,最多输入三次。三次均错,则提示退出程序
		int count = 0;
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入密码:");
		String password = "123456";
//		for (int i = 0; i < 3; i++) {
//			String ss = sc.next();
//			if (password.equals(ss)) {
//				System.out.println("登陆成功");
//				break;
//			} else {
//				count++;
//				System.out.println("密码错误,有" + (2 - i) + "次机会");
//				if (count == 3)
//					System.out.println("退出应用");
//
//			}
//		}
		while (count < 3) {
			String ss = sc.nextLine();
			if (password.equals(ss)) {
				System.out.println("登陆成功");
				break;
			} else {
				count++;
				System.out.println("输入的密码错误!");
				if (count == 3)
					System.out.println("退出应用");
			}
		}
		sc.close();
	}

}

输出9*9的乘法口诀表

public class Test11 {

	public static void main(String[] args) {
		// 19、输出9*9的乘法口诀表
		for (int i = 1; i <= 9; i++) {
			for (int j = 1; j <= i; j++) {
				int sum = i * j;
				System.out.print(j + "*" + i + "=" + sum + "\t");
			}
			System.out.println();
		}
	}
}

有一个有钱的神经病,他往银行里存钱,第一天存1元,以后每天比前一天多存50%,完成下列计算任务

         1、他存到第几天,当天存的钱会超过10元

        2、一个月(30天)后,他总共存了多少钱

public class Test12 {
	public static void main(String[] args) {
		// 有一个有钱的神经病,他往银行里存钱,第一天存1元,
		// 以后每天比前一天多存50%,完成下列计算任务
		// ① 他存到第几天,当天存的钱会超过10元
		// ② 一个月(30天)后,他总共存了多少钱
		int day = 1;
		double money = 1.0;
//		while (money < 10) {
//			money *= 1.5;
//			day++;
//			System.out.println("day " + day + " money " + money);
//		}
		money = 1.0;
		for (; money < 10;) {
			day++;
			money *= 1.5;
			System.out.println("第 " + day + " 天,存入 " + money + " 元");
		}
		System.out.println("他存到第 " + day + " 天,当天存的钱会超过10元;" + "这天会存 " + money + " 元");
		double sum = 0;
		money = 1.0;
		for (int i = 1; i <= 30; i++) {
			sum += money;
			money *= 1.5;
//			System.out.println("第 " + (i + 1) + " 天存入的钱为 " + money + " 元");
		}
		System.out.println("30天,总共存了 " + sum + " 元");

	}
}

有一个400米一圈的操场,一个人要跑10000米,第一圈50秒,其后每一圈都比前一圈慢1秒,按照这个规则计算跑完10000米需要多少秒

public class Test13 {

	public static void main(String[] args) {
		// 有一个400米一圈的操场,一个人要跑10000米,第一圈50秒,
		// 其后每一圈都比前一圈慢1秒,按照这个规则计算跑完10000米需要多少秒
//		int round = 10000 / 400;
//		int sum = 0;
//		int time = 50;
//		for (int i = 1; i <= round; i++) {// i是圈数
//			sum += time;
			System.out.println("第" + i + "圈,时间 " + time + " 秒,总的时间为 " + sum + " 秒");
//			time++;
//		}
//		System.out.println("一个人跑10000米,花费时间 " + sum + " 秒");

		// while循环
		int time = 0;
		int rr = 50;
		int sum = 0;
		final int ROUND = 400;
		while (true) {
			sum += ROUND;
			time += rr++;
			if (sum >= 10000)
				break;

		}
		System.out.println("一个人跑10000米,花费时间 " + time + " 秒");
	}

}

井里有一只蜗牛,他白天往上爬5米,晚上掉3.5米,井深56.7米。计算蜗牛需要多少天才能从井底爬出来

public class Test14 {

	public static void main(String[] args) {
		// 井里有一只蜗牛,他白天往上爬5米,晚上掉3.5米,井深56.7米。
		// 计算蜗牛需要多少天才能从井底到爬出来
//		int day = 1;
//		double sum = 0;// 爬过的距离
//		while (true) {
//			// 白天向上爬5米
//			sum += 5;
//			System.out.println("第 " + day + " 天" + ",爬过的距离为 " + sum + " 米");
//			if (sum >= 56.7) {
//				break;
//			}
//			// 晚上掉3.5米
//			sum -= 3.5;//运算符"-"会自动进行类型转换
//			day++;
//		}
//		System.out.println("蜗牛需要 " + day + " 天才能从井底到爬出来");

		final float HIGH = 56.7f;
		boolean flag = true;// 白天还是晚上
		int day = 0;// 天数统计
		float dist = 0;
		while (true) {
			if (flag) {
				dist += 5;
				day++;
			} else {
				dist -= 3.5;
			}
			flag = !flag;
			if (dist >= HIGH)
				break;
		}
		System.out.println("蜗牛需要 " + day + " 天才能从井底到爬出来");
	}

}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值