6道题,让你打牢for、while循环结构基础!

1、计算1000以内所有不能被7整除的整数之和。

        算法思路:我们从1-1000,一个数一个数的判断。如果能被7整除,就不管它,如果不能被7整除,就将它累加。

        代码:

public class CanNotDivi7 {
    //计算1000以内不能被7整除的数的和。
    public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        while(i <= 1000){
            if(i%7 != 0){//判断当前数字能否被7整除,如果余数不为零说明不能被整除,这个i就要累加!
                sum += i;
                System.out.println(i);
            }
            i++;
        }
        System.out.println("1000以内不能被7整除的数字的和是:"+sum);
    }
}

2、一张纸的厚度大约是0.08mm,对折多少次之后能达到或超过珠穆朗玛峰的高度(8848.13米)。

        算法思路:一张纸每折叠一次,厚度就会增加二倍。折叠两次就是0.08*2^2,折叠五次就是0.08*2^5……

代码:

public class FoldPaper {
    //一张纸的厚度大约是0.08mm,对折多少次之后能达到或超过珠穆朗玛峰的高度(8848.13米
    public static void main(String[] args) {
        double paperHigh = 0.08;//将纸厚度的单位化为米
        int times = 0;
        System.out.println(paperHigh);
        while(paperHigh <= (8848.13*1000)){
            times++;
            paperHigh *= 2;
        }
        System.out.println("折叠"+times+"次之后纸的高度为"+paperHigh+",一张纸超过了珠穆朗玛峰");
    }
}

3、任意输入一个整数(小于10位),输出它一共有多少位。

        算法思路:在学代码的起始阶段,代码就是要朴实无华!我们知道java中整型做除法运算时往往会丢失精度,如:(int)5/6 = 0,后面的小数位会自动舍弃。由此为灵感,我们输入一个数,让它从最小的十位数开始除,如果结果为零就除以最小的9位数,还为零就除以最小的8位数,循环往复直到结果不为零为止,此时使结果不为零的除数的位数就和我们输入的位数相同。

        代码:

import java.util.Scanner;

public class No_7_JudgeNum {
    //任意输入一个整数(小于10位),输出它一共有多少位。
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //输入
        System.out.println("请输入一个10位数以内的数字");
        double randomNum = sc.nextDouble();
        double billion = 1000000000;
        int seat = 10;
        while((int)(randomNum/billion) == 0){
            billion /= 10;
            seat--;
        }
        System.out.println(randomNum+"是"+seat+"位数");

    }
}

4、计算 1+2-3+4-5+6-7....+100的结果//注意审题。

        算法思路:此题较为简单,但是有些细节还是困住了大部分新手。我们可以发现,2,、4、6、8……全为正数,而且是偶数。3、5、7、9……前面带的都是负号,并且全是奇数。此时有一个例外情况1虽然是奇数,但它是正号。因此1 需要单独处理。

public class ArrayCompute {
    //计算 1+2-3+4-5+6-7....+100的结果
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            if(i%2 != 0 && i != 1){//判断i若为奇数,且不为1,则在计算过程中加上负号
                sum -= i;
                //System.out.println(i);//检验i判断是否合格
            }else{//i为偶数,则加上正号
                sum += i;
            }
        }
        System.out.println("1+2-3+4-5+6-7....+100 = "+sum);//输出结果
    }
}

5、从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 5*4*3*2*1

       算法思路: 这是代码练习中常见的阶乘计算方法。没有什么技巧,理清思路,再写代码。理清思路真的很重要,很多新手在没有正确的指导下喜欢边写代码边想,这样会严重影响对题目的思考,代码不重要,重要的是你的思路。因此,我建议先在纸上把大致方向路捋清楚再写代码会事半功倍哦!努力点,让大脑充满逻辑!————————————————————言归正传,阶乘嘛,我们将这个数递减至1的所有的数相乘。还是直接看代码吧!

import java.util.Scanner;

public class Multiplication {
    //从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 5*4*3*2*1
        public static void main(String[] args) {
        int mult = 1;
        Scanner sc = new Scanner(System.in);
        //请问你您想要计算那个数的阶乘
        System.out.println("请问你您想要计算那个数的阶乘");
        int num = sc.nextInt();
        int i = num;
        while(i != 1){
            mult = mult*i;
            i--;
        }
        System.out.println(num+"!是"+mult);
    }
}

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

        算法思路:我觉得这道题应该是6道题目中最难的了,所以将它放在了最后。这道题,难得点不在于它的代码,而在于解决它的思路。脑子比技术更重要!这道题要从后往前推,我们要求的是第一天摘了多少个。那我们来思考一下第九天的情况,我们知道第十天早上剩下一个桃子 ,那么这一个就是第九天吃剩下来的。根据题目我们可以求得,第九天的早晨有四个桃子,吃了三个剩下一个。第九天早晨剩下的桃子是第八天晚上剩下的。

早晨晚上
第九天41
第八天10(可以算出)4
第七天2210
…………22

 以此类推,可以看到早晨的和前一天晚上剩的是一样的。可以有公式:

某天早晨的桃子数 = 2*晚上剩的桃子数+2;根据此公式可以有以下代码:

public class MonkeyEatPeach {
    public static void main(String[] args) {
        // 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,
        // 第二天早上又将剩下的桃子吃了一半,又多吃一个,
        // 以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。
        //设第一天猴子摘了x个桃子
        int eatLeft = 1;
        int left;
        for (int i = 9; i >= 1; i--) {
           left =  2*eatLeft+2;
           eatLeft = left;
           System.out.println("第"+i+"天早晨还剩"+left+"个桃子。");
        }
    }
}

这猴子是孙悟空吧,第一天吃了七千多个桃子,哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值