Java基础练习 之 for循环练习

打印所有水仙花数;找出1000以内的完数;猴子吃桃问题;1、2、3、4组成的互不相同且无重复数字的三位数;这些是在整理学习资料的时候,无意间翻到以前学习的一些练习题,当时觉得挺有意思的,所以决定分享一下。

1、打印出所有的“水仙花数”。

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

解题思路:for循环取余,并求各位数立方和即可,这里需注意一个方法  Math.pow(a, b)  ,及求的是a的b次方

public void test1() {
		for (int i = 100; i >= 100 && i <= 1000; i++) {
                        //取余,a取个位数,b取十位数,c取百位数(123/100%10=1%10)
			int a = i % 10; 
                        int b = i / 10 % 10; 
                        int c = i / 100 % 10;
			double x = Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3);
			if (x == i) {
				System.out.println(x);
			}
		}

	}

结果如下:

2、有 1、2、3、4  四个数字,能组成多少个互不相同且无重复数字的三位数?都有哪些?

解题思路:循环遍历所有三位数(给定范围内的三位数也可以),然后对每个三位数进行取余处理,判断取余之后的数的范围,并比较是否相等,最后统计输出。

public void test2() {
    int a, b, c;
    int count = 0;
    for (int i = 100; i < 500; i++) { //遍历500内的所有三位数
	a = i % 10; // 取个位数
	b = i / 10 % 10; // 取十位数
	c = i / 100 % 10; // 取百位数 123/100%10 = 1%10
	if (a <= 4 && a > 0 && b <= 4 && b > 0 && c <= 4 && c > 0) { //判断各个数是否符合条件
		if (a != b && a != c && b != c) { 		//判断是否重复
		    System.out.println(i);
		    count += 1;
			}
		    } 
		}
		System.out.println("个数为:" + count);

	}

结果如下:

 3、编程找出 1000 以内的所有完数。

一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 6 = 1+2+3。

解题思路:for循环嵌套,第一层2开始,第二层1开始且不能大于第一层的数,第二层循环嵌套中进行取余操作,将因子进行相加后与原数比较

public void test3() {
		for (int i = 2; i <= 1000; i++) {
			int sum = 0; // sum 不放在外层for里会导致sum将每次循环的数一直加起来,不会重新初始化
			for (int j = 1; j < i; j++) {  //寻找i的因子并进行相加
				if (((i % j) == 0)) {
					sum += j;
				}
			}
			if (sum == i) {  //判断是否为完数
				System.out.println(sum);
			} 
		} 
	}

4、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

解题思路:这题其实很简单,只要逆向思考就可以了。第十天早上还剩下一个,第九天就吃了前一天的一半加一个,导致吃完后只剩下一个,因此前一天应该剩下 (1+1)*2 = 4个,以此类推即可计算出第一天的个数。

public void test4() {
		int sum = 1;
		for (int i = 1; i < 10; i++) {
			sum = (sum + 1) * 2;
		}
		System.out.println(sum);

	}

结果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值