循环控制基础

循环控制

Key Point
●for 循环的使用
●while 循环
●do...while 循环
●break 和continue

练习

1. (for 循环)计算1+2+3+...+100 的和

public class Test21 {

    public static void main(String[] args) {
//        (for 循环)计算1+2+3+...+100 的和
        int sum=0;
        for (int i = 1; i <=100; i++) {
            sum+=i;
        }
        System.out.println("sum="+sum);
   
    }
}

2. (for 循环)计算1+3+5+...+99 的和

public class Test22 {
    public static void main(String[] args) {
        //(for 循环)计算1+3+5+...+99 的和
        int sum=0;
        for (int i = 1; i <=100; i++) {
            if (i%2==1){
                sum+=i;
            }
        }
        System.out.println("sum="+sum);

    }
}

3. (while/do…while 循环)

把1、2 两题用while 循环或do...while 循环改写

public class Test23 {
   public static void main(String[] args) {
      //把1、2 两题用while 循环或do...while 循环改写
      int sum1=0;
      int sum2=0;
      int i=1;
      int j=1;
      while (i<=100){
         sum1+=i;
         i++;
      }
      while (j<=100){
         sum2+=j;
         j+=2;
      }

      System.out.println("sum1="+sum1);
      System.out.println("sum2="+sum2);
   }
}

 

4. (for 循环)读入一个小于10 的整数n,输出它的阶乘n!

public class Test24 {
    public static void main(String[] args) {
        //(for 循环)读入一个小于10 的整数n,输出它的阶乘n!
        int sum=1;
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入要计算的阶乘的值");
        int num=scanner.nextInt();
        //输入要计算的阶乘的值
        for (int i = 1; i <=num; i++) {
            sum*=i;
        }
        System.out.println(num+"阶乘的值="+sum);
    }
}

 

5. (for 循环)求100 以内所有能被3 整除但不能被5 整除的数字的和。

public class Test25 {
    public static void main(String[] args) {
        //(for 循环)求100 以内所有能被3 整除但不能被5 整除的数字的和。
        int sum=0;
        for (int i = 1; i <=100; i++) {
            if (i%3==0&&i%5==0) {
                sum+=i;
            }
        }
        System.out.println("sum="+sum);
    }
}



 

6. (for 循环)百钱买百鸡”是我国古代的著名数学题。

题目这样描述:3 文钱可以买1只公鸡,2 文钱可以买一只母鸡,1 文钱可以买3 只小鸡。用100 文
钱买100 只鸡,那么各有公鸡、母鸡、小鸡多少只?

public class Test26 {
    public static void main(String[] args) {
//3 文钱可以买1只公鸡,2 文钱可以买一只母鸡,1 文钱可以买3 只小鸡。用100 文
//钱买100 只鸡,那么各有公鸡、母鸡、小鸡多少只?

        int totalMoney = 100;
        int totalChicken = 100;

        for (int x = 0; x <= totalMoney / 3; x++) {
            for (int y = 0; y <= totalMoney / 2; y++) {
                int z = totalChicken - x - y;
                if (3 * x + 2 * y + z / 3 == totalMoney && z % 3 == 0) {
                    System.out.println("公鸡:" + x + "只");
                    System.out.println("母鸡:" + y + "只");
                    System.out.println("小鸡:" + z + "只");
                    return;
                }
            }
        }

        System.out.println("无解");

    }
}

 

7. (for 循环)搬砖问题:

36 块砖,36 人搬,男搬4,女搬3,两个小孩抬1 砖, 要求一次全搬完,问男、女和小孩各若干?

public class Test27 {
    public static void main(String[] args) {
        //36 块砖,36 人搬,男搬4,女搬3,两个小孩抬1 砖, 要求一次全搬完,问男、女和小孩各若干?
        /*
        * x 男人
        * y 女人
        * z 小孩
        * */
        for (int x = 0; x <= 36; x++) {//男人数量
            for (int y = 0; y <= 36 - x; y++) {// 36 - x;女人数量
                int z = 36 - x - y;//小孩数量
                if (8 * x + 6 * y + z == 72) {//等式
                    System.out.println("男:" + x);
                    System.out.println("女:" + y);
                    System.out.println("小孩:" + z);
                    return;
                }
            }
        }
 
        System.out.println("无解");
    }
}

 

8. (for 循环)*编程找出四位整数abcd 中满足下述关系的数。

 (ab+cd)(ab+cd)=abcd

public class Test28 {
    public static void main(String[] args) {
        for (int num = 1000; num <= 9999; num++) {
            int a = num / 1000;
            int b = (num / 100) % 10;
            int c = (num / 10) % 10;
            int d = num % 10;
 
            if (Math.pow((10 * a + b + 10 * c + d), 2) == num) {
                System.out.println(num);
            }
        }
    }
}

9. (循环)读入一个整数n,输出如下图形

 n = 3
*

***

*****

n = 4
*

***

*****

*******

思路:读入的整数n,就是外层循环的循环次数。
对于每一行,要做的事情:1. 输出若干个空格;2. 输出若干个星;3. 换行。
提示:输出不换行,用System.out.print()

public class Test29 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入要打印的行数");
       int line= scanner.nextInt();
 
        for (int i = 0; i < line; i++) {
            for (int j = 0; j < i*2+1; j++) {
                System.out.print("*");
            }
            System.out.println();
 
        }
    }
}

 

10. (循环)*输出99 乘法表

public class Test210 {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <=i; j++) {
                System.out.print(j+"*"+i+"="+(i*j)+" ");
            }
            System.out.println();
        }
    }
}

 

11. (循环)**求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足

a3+b3+c3=abc,则abc 是水仙花数。

public class Test211 {
    public static void main(String[] args) {
        for (int num = 100; num < 1000; num++) {
            int a = num / 100;
            int b = (num / 10) % 10;
            int c = num % 10;
 
            if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == num) {
                System.out.println(num);
            }
        }
    }
}

 

12. (循环)输入一个整数,计算它各位上数字的和。

(注意:是任意位的整数)

public class Test212 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入数字");
        int number= scanner.nextInt();
        int sum=0;
        while (number!=0){
            sum+=number%10;//取下来最后一位
            number=number/10;//去掉最后一位
        }
        System.out.println("number="+number+"的各位数字的和为"+sum);
    }
}

 

13. (循环)输入一整数A,判断它是否质数。

提示1:若从2 A 的平方根的范围内,没有一个数能整除A,则A 是质数。
提示2:在java 中计算n 的平方根可以使用Math.sqrt(n)

public class Test213 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入数字");
        int number= scanner.nextInt();
       if(isPrime(number)){
           System.out.println("number="+number+"是素数");
       }
       else {
 
           System.out.println("number="+number+"不是素数");
       }
    }
    private static  boolean isPrime(int number){
        if (number<=1){
            return false;
        }
        else {
            for (int i = 2; i <=Math.sqrt(number); i++) {
                if (number%i==0){
                    return false;
                }
            }
        }
        return true;
    }
}

 

14. (循环)如果一个数等于其所有因子之和,我们就称这个数为"完数",例如

6 的因子为1,2,3 6=1+2+3 6 就是一个完数.请编程打印出1000 以内所有的完数

public class Testr14 {
    public static void main(String[] args) {
        System.out.println("1000以内的完数:");
        //循环找完数
        for (int num = 2; num <= 1000; num++) {
            if (isPerfectNumber(num)) {
                System.out.println(num);
            }
        }
    }
 
    //判断完数
    //如果一个数等于其所有因子之和,我们就称这个数为"完数"
    //循环找到所有的引子相加
    public static boolean isPerfectNumber(int num) {
        int factorsSum = 0;
        for (int i = 1; i < num; i++) {
            if (num % i == 0) {
                factorsSum += i;
            }
        }
        return factorsSum == num;
    }
}

 

15. **计算圆周率


:PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17......这个算式的结果会无
限接近于圆周率的值,我国古代数学家祖冲之计算出,圆周率在3.1415926
3.1415927 之间,请编程计算,要想得到这样的结果,他要经过多少次加减法运
?

public class Test215 {
    public static void main(String[] args) {
        double ltargetPi=3.1415926;
        double rtargetPi=3.1415927;
 
        int iteration=calculatePi(ltargetPi,rtargetPi);
        System.out.println("在"+ltargetPi+'-'+rtargetPi+"范围内,进行了"+iteration+"次迭代!");
    }
 
 
 
    //不断更新calculatePi的值以至于获取逼近的Π的值
    public static int calculatePi(double ltargetPi,double rtargetPi){
        double calculatePi=0.0;//存储Π的值。下面计算的时候会一直更新这个值,一直去逼近Π
        int sign=1;//表示正负号的
        int denominator=1;//表示分母  每次迭代会+2
        int iteration=0;//表示迭代的次数,0表示没有进行迭代
 
        //每次迭代逼近目标的Π值
        //每次循环计算的是精度,大于的话就是还没到精度就会一直循环下去
        while (true){
            double term=sign*(4.0/denominator);//必须是x.0的形式不然不是double
            calculatePi+=term;//计算当前的Π值
            sign*=-1;//变换符号
            denominator+=2;//更新分母
            iteration++;//更新迭代次数
            if (ltargetPi<=calculatePi&&calculatePi<=rtargetPi){
                break;
            }
        }
        return iteration;//得到迭代次数
    }
 
 
}

 

16. (循环)已知:faibonacci(费波那契)数列的前几个数分别为0,1,1,

235……。从第3 项开始,每一项都等于前两项的和。
读入一个整数n,编程求出此数列的前n 项。
注意:这里的数列是从0 开始的。

 

public class Test216 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入数字");
        int number= scanner.nextInt();
        System.out.print("前n项");
        for (int i = 0; i < number; i++) {
            System.out.print(fibonacci(i)+" ");
        }
        System.out.println();
        
    }
 
    //求斐波那契数组
    private static long fibonacci(int n){
        if (n==0) {//递归出口
            return 0;
        }
        else if (n==1) {
            return 1;//递归出口
        }
        else {//递归方程
            return fibonacci(n-1)+fibonacci(n-2);
        }
    }
}

 

17. (循环,操作符)一个int 类型的整数由32 个二进制位组成,每个二进

制位的值要么为0 要么为1。要求读入一个int 类型的整数n,计算它的32 个二
进制位中总共有多少位为1

public class Test217 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入数字");
        int number= scanner.nextInt();
        System.out.println(number+"中1的数量为"+countOnes(number));
    }
    //计算int中的整数的量(采用移位的方式)
    public static int countOnes(int n) {
        int count = 0;
        for (int i = 0; i < 32; i++) {
            if ((n & 1) == 1) {
                count++;
            }
            n >>= 1;
        }
 
        return count;
    }
 
}

18. (循环)打渔还是晒网

中国有句老话叫三天打渔,两天晒网。假设有一个人从2000 1 1
开始三天打渔两天晒网,读入三个整数,分别表示年份、月份、日期,
问这三个整数所表示的那天这个人在打渔还是在晒网?

public class Test218 {
    public static void main(String[] args) {
        int year ; // 示例:年份为2000
        int month ;   // 示例:月份为1
        int day ;     // 示例:日期为5
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入年份");
        year=scanner.nextInt();
        System.out.println("请输入月份");
        month=scanner.nextInt();
        System.out.println("请输入日");
        day=scanner.nextInt();
        LocalDate startDate = LocalDate.of(2000, 1, 1); // 开始日期
        LocalDate targetDate = LocalDate.of(year, month, day); // 给定日期

        //计算出开始日期和目标日期之间的天数差,并将其加1,得到总天数
        //ChronoUnit.DAYS.between 方法计算出开始日期和目标日期之间的天数差
        long days = ChronoUnit.DAYS.between(startDate, targetDate) + 1; // 计算日期间隔,需要加1

        int count = (int) (days % 5); // 取余数

        if (count == 1 || count == 2 || count == 3) {
            System.out.println("这个人在打渔。");
        } else {
            System.out.println("这个人在晒网。");
        }


    }
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不懂代码的孩子

谢谢大佬

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

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

打赏作者

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

抵扣说明:

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

余额充值