java循环控制以及递归的练习

这篇博客通过一系列的编程练习来探讨Java中的循环控制和递归应用,包括寻找水仙花数、自定义位数的数字求和、查找100以内的孪生素数、设计彩票游戏规则以及预测未来的日期等挑战,旨在提升读者对Java编程中循环和递归的理解与运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.求水仙花数。
        ABC  = a^3+b^3+c^3

private static void test1() {
//        求水仙花数。
//		ABC  = a^3+b^3+c^3
        for (int i = 100; i < 999; i++) {
            int B = i / 100;
            int S = i % 100 / 10;
            int G = i % 10;
            if ((B * B * B)+(S * S * S)+(G * G * G) == i){
                System.out.print(i + " ");
            }
        }
    }


/*
153 370 371 407 
*/

2.求  a+aa+aaa+.......+aaaaaaaaa=?
   其中a为1至9之中的一个数,项数也要可以指定。

private static void test2() {
        //求  a+aa+aaa+.......+aaaaaaaaa=?
        //      其中a为1至9之中的一个数,项数也要可以指定。
        Scanner sc = new Scanner(System.in);
        System.out.print("项数:");
        int len = sc.nextInt();

        Scanner sc1 = new Scanner(System.in);
        System.out.print("数字:");
        double num = sc1.nextDouble();
        double one = num, sum = 0;
        for (int i = 1; i <= len; i++) {
            if (i == 1) {
                sum += num;
                //System.out.println(num);
                continue;
            }
            num = one + num * 10;
            sum += num;
            //System.out.println(num);
        }
        System.out.println("和为:"+sum);
    }


/*
项数:6
数字:1
和为:123456.0
*/

3.如果两个素数之差为2,这样的两个素数就叫作"孪生数",
   找出100以内的所有"孪生数".

public static void test3() {
        //     如果两个素数之差为2,这样的两个素数就叫作"孪生数",
        //     找出100以内的所有"孪生数".
        int nums1 = 0,nums2 = 0;
        int a=0;
        System.out.println("孪生数为:"+"1"+"\t"+"3");
        for (int num = 1; num <= 100; num++) {
            boolean flag = true ;
            for (int i = 2; i <= num / 2; i++) {
                if (num % i == 0) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                if (a % 2 == 0){
                    nums1 = num; //
                    if (nums1 - nums2 == 2 ) {
                        System.out.println("孪生数为:"+nums2+"\t"+nums1);
                    }
                    a++;
                } else {
                    nums2 = num;
                    if (nums2 - nums1 == 2 ) {
                        System.out.println("孪生数为:"+nums1+"\t"+nums2);
                    }
                    a++;
                }
            }
        }
    }




/*
孪生数为:1	3
孪生数为:3	5
孪生数为:5	7
孪生数为:11	13
孪生数为:17	19
孪生数为:29	31
孪生数为:41	43
孪生数为:59	61
孪生数为:71	73
*/

4.把123456789这个数乘以一个什么数,能使它的结果不但
    不含零,而且仍然是 由1,2,3,4,5,6,7,8,9这九个数字组成的,
    只是顺序不同而已.

private static void test4() {
        //把123456789这个数乘以一个什么数,能使它的结果不但
        //不含零,而且仍然是 由1,2,3,4,5,6,7,8,9这九个数字组成的,
        //只是顺序不同而已.
        int m = 123456789 ,n;
        int j2 = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9;
        for (int i = 0; i < 100; i++) {
            n = m * i;
            int a = n / 100000000;
            int b = n / 10000000 - a*10;
            int c = n / 1000000 - a*100 - b*10;
            int d = n / 100000 - a*1000 - b*100 - c*10;
            int e = n / 10000 - a*10000 - b*1000 - c*100 - d*10;
            int f = n / 1000 - a*100000 - b*10000 - c*1000 - d*100 - e*10;
            int g = n / 100 - a*1000000 - b*100000 - c*10000 - d*1000 - e*100 - f*10;
            int h = n / 10 - a*10000000 - b*1000000 - c*100000 - d*10000 - e*1000 - f*100 - g*10;
            int o = n % 10;
            int j1 = a * b * c * d * e * f * g * h * o;
            if (j1 == j2){
                System.out.println(n);
            }
        }
    }




/*
123456789
246913578
493827156
617283945
864197523
987654312
*/

5.循环的套嵌练习;

private static void test5() {
        /*请使用循环完成如下图案的打印

*
**
***
****
*****
******
*/
        for (int i = 0; i <= 6; i++) {
            for (int i1 = 0; i1 < i; i1++) {
                System.out.print("*");
            }
            System.out.println();
        }

/*
   *
  ***
 *****
*******
*/
        for (int i = 0; i <= 4; i++) {
            for (int j = 4-i; j > 0; j --){
                System.out.print(" ");
            }
            for (int m = 0; m < 2 * i -1 ; m ++){
                System.out.print("*");
            }
            System.out.println();

        }
/*
*******
 *****
  ***
   *
*/
        for (int m = 1; m <= 4; m++) {
            for (int n = 0; n <= m; n++) {
                System.out.print(" ");
            }
            for (int x = 1; x <= 7 -2 * (m - 1); x++) {
                System.out.print("*");
            }
            System.out.println();
        }
}

6.小明今年高考,考了700,父母,给他买了一对刚刚出生小兔子,
    四个月后成长为成年兔子,成年后,每过一个月,假设生出一对新的小兔子

    问:第n月,小明家共有多少对兔子。

private static int test6( int i) {
        //小明今年高考,考了700,父母,给他买了一对刚刚出生小兔子,
        //四个月后成长为成年兔子,成年后,每过一个月,假设生出一对新的小兔子
        //问:第n月,小明家共有多少对兔子。
        if (i < 4){
            return 1;
        }
        return test6(i -1) + test6(i - 4);
    }

7.假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票, 提示用户输入一个两位数,然后按照下面的规则判定用户是否能赢:

1)如果用户的输入数匹配彩票的实际顺序,奖金为10 000美元。

2)如果用户输入的所有数字匹配彩票的所有数字,奖金为3000美元。

3)如果用户输人的一个数字匹配彩票的一个数字,奖金为1000美元。

private static void test7() {
//        假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,
//         提示用户输入一个两位数,然后按照下面的规则判定用户是否能赢:
//        1)如果用户的输入数匹配彩票的实际顺序,奖金为10 000美元。
//         2)如果用户输入的所有数字匹配彩票的所有数字,奖金为3000美元。
//         3)如果用户输人的一个数字匹配彩票的一个数字,奖金为1000美元。
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个两位数:");
        int cai = sc.nextInt();
        int zhen = (int)(Math.random() * 90 + 10);
        int cs = cai / 10;
        int cg = cai % 10;
        int zs = zhen / 10;
        int zg = zhen % 10;
        if (cai == zhen){
            System.out.println("恭喜你获得10000美元奖金!");
            System.out.println("本期中奖号码为:" + zhen);
        }
        if ((cs == zs || cg == zg) && (cs == zg || cg == zs)){
            System.out.println("恭喜你获得3000美元奖金!");
            System.out.println("本期中奖号码为:" + zhen);
        }
        if (cs == zs || cg == zg || cs == zg || cg == zs){
            System.out.println("恭喜你获得1000美元奖金!");
            System.out.println("本期中奖号码为:" + zhen);
        }
        else {
            System.out.println("很遗憾你未中奖!");
            System.out.println("本期中奖号码为:" + zhen);
        }
    }


/*
请输入一个两位数:62
恭喜你获得1000美元奖金!
本期中奖号码为:64
*/

8.

 

private static void test8() {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入a的值:");
        int a = sc.nextInt();
        Scanner sc1 = new Scanner(System.in);
        System.out.print("请输入b的值:");
        int b = sc1.nextInt();
        Scanner sc2 = new Scanner(System.in);
        System.out.print("请输入c的值:");
        int c = sc2.nextInt();
        if ( b * b -(4 * a * c) > 0){
            System.out.print("有两个根!!!");
        }
        if ( b * b -(4 * a * c) == 0){
            System.out.print("有一个根!!!");
        }
        else {
            System.out.print("该方程无解!!!");
        }
    }


/*
请输入a的值:2
请输入b的值:6
请输入c的值:5
该方程无解!!!
*/

9.

 

private static void test9() {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入a的值:");
        int a = sc.nextInt();
        Scanner sc1 = new Scanner(System.in);
        System.out.print("请输入b的值:");
        int b = sc1.nextInt();
        Scanner sc2 = new Scanner(System.in);
        System.out.print("请输入c的值:");
        int c = sc2.nextInt();
        Scanner sc3 = new Scanner(System.in);
        System.out.print("请输入d的值:");
        int d = sc3.nextInt();
        Scanner sc4 = new Scanner(System.in);
        System.out.print("请输入e的值:");
        int e = sc4.nextInt();
        Scanner sc5 = new Scanner(System.in);
        System.out.print("请输入f的值:");
        int f = sc5.nextInt();
        int x = (e * d - b *f) / (a * d - b * c);
        int y = (a * f - e * c) / (a * d / b * c);
        if (a * d - b * c == 0){
            System.out.println("此方程无解!!!");
        }else {
            System.out.println("x =" + x);
            System.out.println("y =" + y);
        }
    }


/*
请输入a的值:1
请输入b的值:2
请输入c的值:3
请输入d的值:4
请输入e的值:5
请输入f的值:6
x =-4
y =-1
*/

 10.(找到将来的日期)编写一个程序,提示用户输入代表今天日期的数字(周日为0,周一为1,……,周六为6)。同时,提示用户输人一个今天之后的天数,作为代表将来某天的数字,然后显示这天是星期几。

private static void test10() {
                Scanner scanner=new Scanner(System.in);
                System.out.print("今天是周几:");
                int today=scanner.nextInt();
                System.out.print("未来的几天:");
                int future=scanner.nextInt();
                int futureDay=(today+future)%7;

                String todayStr="";
                String futureDayStr="";

                if(today==0){
                    todayStr="周日";
                }else if(today==1){
                    todayStr="周一";
                }else if(today==2){
                    todayStr="周二";
                }else if(today==3){
                    todayStr="周三";
                }else if(today==4){
                    todayStr="周四";
                }else if(today==5){
                    todayStr="周五";
                }else if(today==6){
                    todayStr="周六";
                }
                if(futureDay==0){
                    futureDayStr="周日";
                }else if(futureDay==1){
                    futureDayStr="周一";
                }else if(futureDay==2){
                    futureDayStr="周二";
                }else if(futureDay==3){
                    futureDayStr="周三";
                }else if(futureDay==4){
                    futureDayStr="周四";
                }else if(futureDay==5){
                    futureDayStr="周五";
                }else if(futureDay==6){
                    futureDayStr="周六";
                }
                System.out.println("今天是"+todayStr+","+future+"天后是"+futureDayStr);
            }



/*
今天是周几:3
未来的几天:100
今天是周三,100天后是周五
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值