Java编程——循环控制练习

循环控制练习:

for/while


Q1:求和1+2+3+……+100

package Zuoye_week01;
//求和1+2+3+……+100
public class Zuoye01 {
    public static void main(String[] args) {
        int sum=0;
        for (int i=1;i<=100;i++){
            sum+=i;
        }
        System.out.println(sum);
    }
}

Q2:求和1+3+5+……+99

package Zuoye_week01;
//求和1+3+5+……+99
public class Zuoye02 {
    public static void main(String[] args) {
        int sum=0;
        for (int i=1;i<=99;){
            sum+=i;
            i+=2;
        }
        System.out.println(sum);
    }
}

Q3:(while/do…while循环)把1、2两题用while 循环或do. …while循环改写

do…while循环把1改写
package Zuoye_week01;
//求和1+2+3+……+100
public class Zuoye03_1 {
    public static void main(String[] args) {
        int sum=0,i=1;
        do{
            sum+=i;
            i++;
        }while(i<=100);
        System.out.println(sum);
    }
}

do…while循环把2改写

package Zuoye_week01;
//求和1+3+5+……+99
public class Zuoye03_2 {
    public static void main(String[] args) {
        int sum=0,i=1;
        do{
            sum+=i;
            i+=2;
        }while(i<=99);
        System.out.println(sum);
    }
}

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

package Zuoye_week01;
//小于10整数n,输出阶乘
import java.util.Scanner;
public class Zuoye04 {
    public static void main(String[] args) {
        int sum=1,i;
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入要计算阶乘的数:");
        i=sc.nextInt();
        do{
            sum*=i;
            i--;
        }while(i>=1);
        System.out.println(sum);
    }
}

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

package Zuoye_week01;
//输出100以内被三整除但不能被5整除的和
import java.util.Scanner;
public class Zuoye05 {
    public static void main(String[] args) {
        int i=1,sum=0;
        for(i=1;i<=100;i++){
            if (i%3==0&&i%5!=0){
                sum+=i;
            }
        }
        System.out.println(sum);
    }
}

Q6:(for循环)“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?

package Zuoye_week01;
//公鸡3文钱1只,母鸡2文钱1只,小鸡3只1文钱,100文钱买100只鸡,怎么买?
public class Zuoye06 {
        public static void main(String[] args) {
            for (int cock = 0; cock <= 33; cock++) {
                for (int hen = 0; hen <=50; hen++) {
                    if (cock *3 + hen * 2 + (100 - cock - hen)/3 == 100 && (100 - cock - hen)%3 == 0) {
                        System.out.println("公鸡" + cock + "只,母鸡" + hen + "只,小鸡" + (100 - cock - hen) + "只。");
                    }
                }
            }
        }
}

Q7:(for循环)搬砖问题:36块砖,36人搬,男搬4,女搬3,两个小孩抬1砖,要求一次全搬完,问男、女和小孩各若干?

package Zuoye_week01;
//搬砖问题,36块砖。男搬4,女搬3,俩小孩儿搬一块
public class Zuoye07 {
    public static void main(String[] args) {
        for (int cock = 0; cock <= 9; cock++) {
            for (int hen = 0; hen <=12; hen++) {
                if (cock *4 + hen * 3 + (36 - cock - hen)/2 == 36 && (36 - cock - hen)%2 == 0) {
                    System.out.println("男搬砖" + cock + "次,女板砖" + hen + "次,小孩儿搬砖" + (36 - cock - hen) + "次。");
                }
            }
        }
    }
}

Q8:(for循环)编程找出四位整数abcd中满足下述关系的数。(ab+cd)(ab+cd)=abcd

package Zuoye_week01;
// (for 循环)*编程找出四位整数 abcd 中满足下述关系的数.(ab+cd)(ab+cd)=abcd
public class Zuoye08 {
    public static void main(String[] args) {
            // 千位,百位和十位,各位相乘,先得出千百,和十个位判断即可
            for (int abcd = 1000; abcd <= 9999; abcd++) {
                int ab = abcd / 100;
                int cd = abcd % 100;
                if ((ab + cd) * (ab + cd) == abcd)
                    System.out.println(abcd);
            }
        }
    }

Q9:(循环)读入一个整数n,输出实心金字塔

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

package Zuoye_week01;
import java.util.Scanner;
public class Zuoye09 {
    public static void main(String[] args)
    {
        int i, j, k, n;
        Scanner input = new Scanner(System.in);
        System.out.print("请输入金字塔层数:");
        n = input.nextInt();
        //外层循环控制层数
        for(i = 1; i <= n; i++)
        {
            //根据外层行号,输出星号左边的空格
            for(j = 1; j <= n - i; j++)
                System.out.printf(" ");
            //根据外层行号,输出星号个数
            for(k = 1; k <= 2 * i -1; k++)
                System.out.print("*");
            //一行结束,换行
            System.out.print("\n");
        }
    }

}

Q10:(循环)输出99乘法表

package Zuoye_week01;
//9 * 9 乘法表
public class Zuoye10 {
        public static void main(String[] args) {
            for (int i = 1; i <10; i++) {
                for (int j = 1; j <= i; j++) {
                    System.out.print(j + "*" + i + "=" + i * j + "  ");
                }
                System.out.println();
            }
        }
    }

Q11:(循环)求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足aaa+bbb+ccc=abc,则abc是水仙花数。

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153

package Zuoye_week01;
//输出指定范围内水仙花数:它的每个位上的数字的 3次幂之和等于它本身
import java.util.Scanner;
public class Zuoye11 {
    public static void main(String[] args) {
        int m=0;
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入范围:");
        m=sc.nextInt();
        for (int i = 100; i < m; i++) {
            int firstNum = i / 100;
            int secondNum = i / 10 % 10;
            int thirdNum = i % 10;
            if (firstNum * firstNum * firstNum + secondNum * secondNum * secondNum + thirdNum * thirdNum * thirdNum == i) {
                System.out.println("水仙花数为:" + i);
            }
        }
    }
}

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

注意:是任意位的整数

package Zuoye_week01;
//计算输入的各数位数字之和
import java.util.Scanner;
public class Zuoye12 {
        public static void main(String[] args) {
            Scanner sc= new Scanner(System.in);
            System.out.println("input a number");
            int a= sc.nextInt();
            int sum=0;
            int b=0;
            while(a>0) {
                if(a!=0) {
                    b=a%10;
                    sum=sum+b;
                    a=a/10;
                }
            }
            System.out.println(sum);
        }
    }

Q13:(循环)输入一整数A,判断它是否质数

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

package Zuoye_week01;
import java.util.Scanner;
//判断输入是不是质数
public class Zuoye13 {
        public static void main(String[] args) {
            boolean zhishu = true;
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个正整数");
            int num = sc.nextInt();
            if (num > 0) {
                int k = (int) Math.sqrt(num);//k为num的正平方根,取整数
                for (int i = 2; i <= k; i++) {
                    if (num % i == 0) {
                        zhishu = false;//不是素数
                        break;
                    }
                }
            }
            if (zhishu) {
                System.out.println(num + "是质数");
            } else {
                System.out.println(num + "不是质数");
            }
        }
    }

Q14:(循环)如果一个数等于其所有因子之和,我们就称这个数为"完数",请编程打印出1000以内所有的完数

例如 6 的因子为1,2,3;

6=1+2+36就是一个完数.

package Zuoye_week01;
/*如果一个数等 于其所有因子之和,我们就称这个数为"完数"
 * 例如6的因子为1,2,3, 6=1+2+3, 6就是一一个完数.
 * 请编程打印出1000以内所有的完数*/
public class Zuoye14 {
        public static void main(String[] args) {
            int i = 1;
            int j = 1;
            for(i = 1; i <= 1000; i++) {
                int sum = 0;
                for(j = 1; j <= i - 1; j++) {
                    if(i % j == 0) {
                        sum += j;
                    }
                }
                if(sum == j)
                    System.out.println(sum);
            }
        }
    }

Q15:计算圆周率需要要经过多少次加减法运算

中国古代数学家研究出了计算圆周率最简单的办法:

PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17…

这个算式的结果会无限接近于圆周率的值,我国古代数学家祖冲之计算出,
圆周率在3.1415926和3.1415927之间,
请编程计算,要想得到这样的结果,他要经过多少次加减法运算?

package Zuoye_week01;
//求π需要计算的次数
import java.util.Scanner;
public class Zuoye15 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            double a = 1;
            double pi = 0.0;
            int t = 0;// i为运算次数
            while (!(pi < 3.1415927 && pi > 3.1415926)) {
                pi += 4 / a;// pi(每次累加的数为4/a)
                if (a < 0) {// 当a为负数时减2,当a为正数时加2.
                    a -= 2;
                } else {
                    a += 2;
                }
                a = -a;// a每次取反相加
                t++;
            }
            System.out.println("当圆周率在 3.1415926 和3.1415927 之间时,需要计算:" + t + "次");
        }
    }

Q16:(循环)已知: Fibonacci(费波那契)数列的前几个数分别为0,1,1,2,3,5,……"。从第3项开始,每一项都等于前两项的和

读入一个整数n,编程求出此数列的前n项。

注意:这里的数列是从0开始的。

package Zuoye_week01;
//Fibonacci数列
public class Zuoye16 {
        public static void main(String[] args) {
            for (int counter = 0; counter <= 10; counter++){
                System.out.printf("Fibonacci of %d is: %d\n", counter, fibonacci(counter));
            }
        }

        public static long fibonacci(long number) {
            if ((number == 0) || (number == 1))
                return number;
            else
                return fibonacci(number - 1) + fibonacci(number - 2);
        }
    }

Q17:(循环,操作符)社一个int类型的整数由32个二进制位组成,每个二进制位的值要么为0要么为l。要求读入一个int类型的整数n,计算它的32个二进制位中总共有多少位为1?

package Zuoye_week01;
import java.util.Scanner;
public class Zuoye17 {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        int num1 = 0;
        int num0 = 0;
        while (n > 0) {
            if (n % 2 == 0) {
                num0++;
            } else {
                num1++;
            }
            n >>= 1;
        }
        System.out.println("1的个数为 " + num1);
        System.out.println("0的个数为 " + num0);
    }
}

Q18:打鱼还是晒网?

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

package Zuoye_week01;
import java.util.Scanner;
//打鱼晒网
public class Zuoye18 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入年份:");
            int year = scanner.nextInt();
            System.out.println("请输入月份:");
            int month = scanner.nextInt();
            System.out.println("请输入日期");
            int day = scanner.nextInt();
            judge(getAllDays(year, month, day));
        }

        // 判断打鱼还是晒网
        public static void judge(int days) {
            int x = days % 5;
            if (x >= 1 && x <= 3) {
                System.out.println("打鱼!");
            } else if (x == 4 || x == 0) {
                System.out.println("晒网!");
            }
        }

        // 判断是否是闰年
        public static boolean runNian(int year) {
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                return true;
            }
            return false;
        }

        // 计算距离输入日期多少天
        public static int getAllDays(int year, int month, int day) {
            int sum = 0;
            // 计算2000--(year-1)之间有多少天
            for (int i = 1990; i < year; i++) {
                if (runNian(i)) {
                    sum += 366;
                } else {
                    sum += 365;
                }
            }

            // 计算year内多少天
            sum += getBeforeDays(year, month, day);
            return sum;
        }

        // 判断每月有几天
        public static int getDays(int year, int month) {
            int days = 0;
            switch (month) {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    days = 31;
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    days = 30;
                    break;
                case 2:
                    if (runNian(year)) {
                        days = 29;
                    } else {
                        days = 28;
                    }
                    break;
            }

            return days;
        }

        // 计算本年内该日期之前共有多少天
        public static int getBeforeDays(int year, int month, int day) {
            int sum = 0;
            for (int i = 1; i < month; i++) {
                sum += getDays(year, i);
            }
            return sum + day;
        }
    }

Q19:打印实心菱形

package Zuoye_week01;
//打印实心菱形
import java.util.Scanner;
public class Zuoye19 {
        public static void main(String[] args) {
            int size;
            Scanner input = new Scanner(System.in);
            System.out.print("请输入一半层数:");
            size = input.nextInt();
            //外层循环控制层数
            for (int i = 1; i <= size; i++) {
                for (int j = 1; j <= size - i; j++) {
                    System.out.print(" ");
                }

                for (int k = 1; k <= 2 * i - 1; k++) {
                    System.out.print('*');
                }
                System.out.println();
            }
            for (int i = 1; i <= size-1; i++) {
                for (int j = 1; j <= i; j++){
                    System.out.print(" ");
                }

                for (int k = 2*size-3; k >= 2 * i - 1; k--){
                    System.out.print('*');
                }
                System.out.println();
            }
        }
    }
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,由于浮点数的精度问题,可能会出现无限循环小数。对于这种情况,可以使用BigDecimal类来处理。 BigDecimal类可以表示任意精度的十进制数,它可以处理大于64位的整数和小数。在使用BigDecimal类时,需要注意以下几点: 1. 使用BigDecimal类时,应该使用其构造方法来初始化BigDecimal对象,而不是使用double类型的值来初始化。 例如: ``` BigDecimal bd = new BigDecimal("0.1"); ``` 2. 在进行浮点数运算时,应该使用BigDecimal类提供的方法,而不是使用double类型的运算符。 例如: ``` BigDecimal a = new BigDecimal("0.1"); BigDecimal b = new BigDecimal("0.2"); BigDecimal c = a.add(b); ``` 3. 在比较两个BigDecimal对象的值时,应该使用compareTo()方法,而不是使用等于(==)或不等于(!=)运算符。 例如: ``` BigDecimal a = new BigDecimal("0.1"); BigDecimal b = new BigDecimal("0.2"); if (a.compareTo(b) < 0) { System.out.println("a < b"); } else if (a.compareTo(b) > 0) { System.out.println("a > b"); } else { System.out.println("a = b"); } ``` 关于java无限循环小数判定问题,可以通过以下代码来解决: ``` public static boolean isRepeatingDecimal(BigDecimal num) { BigDecimal[] arr = num.divideAndRemainder(BigDecimal.ONE); BigDecimal decimalPart = arr[1]; String decimalStr = decimalPart.toString().substring(2); // 去掉小数点和整数部分 if (decimalStr.length() < 2) { return false; // 小数部分长度小于2,不可能循环 } int halfLength = decimalStr.length() / 2; for (int i = 1; i <= halfLength; i++) { String str = decimalStr.substring(0, i); if (decimalStr.matches("^(" + str + ")+(.*)" + str + "$")) { return true; // 存在循环节 } } return false; // 不存在循环节 } ``` 该方法接收一个BigDecimal对象,判断其是否为无限循环小数,返回true或false。 以上是关于Java中处理无限循环小数的基础知识和方法介绍,希望能对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值