Java基础第五天(实训学习整理资料(五)练习题)

目录

1、百钱买百鸡

2、搬砖问题

3、(循环)**求水仙花数。

4、完数

5、费波那契,兔子数列

6、打渔还是晒网


1、百钱买百鸡

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

2、搬砖问题

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

3、(循环)**求水仙花数。

所谓水仙花数,是指一个三位数abc,如果满足
a^3+b^3+c^3=abc,则abc 是水仙花数,此处^表示次方。

4、完数

(循环)**如果一个数等于其所有因子之和,我们就称这个数为"完数",例如
6 的因子为1,2,3 6=1+2+3 6 就是一个完数.请编程打印出1000 以内所有的完数

5、费波那契,兔子数列

(循环)**已知:faibonacci(费波那契,兔子数列)数列的前几个数分别为0,1,1,
2,3,5,……。从第3 项开始,每一项都等于前两项的和。
读入一个整数n,编程求出此数列的前n 项。
注意:这里的数列是从0 开始的

6、打渔还是晒网

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

package day1025;

import java.time.LocalDate;
import java.time.Period;
import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num;
        do {
            System.out.println("请输入要执行的序号:" + "\n" + "\t" + "1:进入系统选择" + "\n" + "\t" + "2:退出系统");
            num = scanner.nextInt();
            switch (num) {
                case 2:
                    System.out.println("已退出");
                    System.exit(0);
                    break;
                case 1:
                    Scanner input = new Scanner(System.in);
                    System.out.println("请输入要查看的题目序号:");
                    System.out.println("\t" + "1:百钱买百鸡");
                    System.out.println("\t" + "2:搬砖问题" + "\n" + "\t" + "3:求水仙花数" + "\n" + "\t" + "4:1000以内的完数" + "\n" + "\t" + "5:费波那契(兔子数列)" + "\n" + "\t" + "6:打渔还是晒网");

                    int num1 = input.nextInt();
                    if (num1 > 6 || num1 <= 0) {
                        System.out.println("请重新输入一个正确的题目序号!");
                    }
                    switch (num1) {
                        case 1:
                            /**
                             * 百钱买百鸡
                             */
                            //设公鸡x只,母鸡y只,小鸡z只
                            //则x+y+z=100
                            //5x+3y+1/3z=100
                            int x, y, z, n = 0;
                            System.out.println("一百文钱可以有如下买法:");
                            for (x = 0; x <= 100; x++) {
                                for (y = 0; y <= 100; y++) {
                                    for (z = 0; z <= 100; z++) {
                                        if (5 * x + 3 * y + z / 3 == 100 && z % 3 == 0 && (x + y + z == 100)) {
                                            n++;
                                            System.out.println("第" + n + "种买法:" + "公鸡买" + x + "只" + "\t" + "母鸡买" + y + "只\t" + "小鸡买" + z + "只");
                                        }
                                    }
                                }
                            }
                            break;


                        case 2:

                            /**
                             * 百钱买百鸡
                             */
                            //设男人m位,女人w位,小孩b位
                            //则m+w+b=36
                            //4m+3w+1/2b=100
                            int m, w, b, number = 0;
                            System.out.println("36块砖可以有如下搬法:");
                            for (m = 0; m <= 36; m++) {
                                for (w = 0; w <= 36; w++) {
                                    for (b = 0; b <= 36; b++) {
                                        if (4 * w + 3 * m + b / 2 == 36 && b % 2 == 0 && (w + m + b == 36)) {
                                            number++;
                                            System.out.println("第" + number + "种搬法:" + "男人" + m + "位" + "\t" + "女人" + w + "位\t" + "小孩" + b + "位");
                                        }
                                    }
                                }
                            }
                            break;


                        case 3:

                            /**
                             *三位数的水仙花数
                             */
                            int numb = 0;
                            System.out.println("三位数以内的水仙花数如下:");
                            for (int i = 100; i < 1000; i++) {

                                numb++;
                                //拆分数位
                                int ge = i % 10;   //个位
                                int shi = i / 10 % 10;//十位
                                int bai = i / 100;//百位

                                if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {

                                    System.out.println("分别为排在第" + numb + "位的:" + i);
                                }
                            }

                            break;


                        case 4:

                            /**
                             * 完数
                             */
                            //设置完数的上限
                            int maxnumber = 1000;
                            System.out.println("1000以内的完数如下:");
                            for (int num2 = 2; num2 <= maxnumber; num2++) {
                                int sum = 0;
                                for (int i = 1; i <= num2 / 2 + 1; i++) {
                                    if (num2 % i == 0) {
                                        sum += i;
                                    }
                                }
                                if (sum == num2) {
                                    System.out.println(num2);
                                }
                            }

                            break;


                        case 5:

                            /**
                             *费波那契(兔子数列)
                             */
                            Scanner scanner1 = new Scanner(System.in);
                            System.out.println("请输入一个整数:");
                            int next = scanner1.nextInt();

                            int first = 0, second = 0, third;

                            if (next <= 0) {
                                System.out.println("请输入一个大于0的整数!");
                            } else {
                                System.out.println("兔子数列为:");
                                for (int i = 1; i <= next; i++) {
                                    if (i == 1) {
                                        first = 0;
                                        third = 0;
                                    } else if (i == 2) {
                                        second = 1;
                                        third = 1;
                                    } else {
                                        third = first + second;
                                        first = second;
                                        second = third;
                                    }

                                    System.out.print(third);
                                    System.out.println();

                                }
                            }

                        break;

                        case 6:

                            /**
                             * 打渔还是晒网
                             */

                           /* //输入初识日期
                            LocalDate initalDate =LocalDate.of(2000, 1, 1);
                            //计算当前日期
                            LocalDate currentDate = LocalDate.now();
                            //计算打渔和晒网的日期差
                            Period periodFishing = Period.between(initalDate,currentDate);
                            int today = periodFishing.getDays()%5==0?1:2;
                            System.out.println("从2000年至今来算的话,今天应该:"+(today==2?"晒网":"打渔"));

                            */
                            Scanner sc = new Scanner(System.in);
                            System.out.println("何年?");
                            int Y = sc.nextInt();
                            if (Y<2000){
                                System.out.println("请输入一个2000年后的年份!");
                            }
                            System.out.println("何月?");
                            int M = sc.nextInt();
                            if (M>12){
                                System.out.println("请输入一个正确的月份!");
                            }
                            System.out.println("何日?");
                            int D = sc.nextInt();
                            if (Y>30){
                                System.out.println("请从1-30中输入一个正确的天数!");
                            }
                            int T=((Y-2000)*365)+((M-1)*30)+D;
                            if ((T%5)==0||(T%5)>3){
                                System.out.println("今天应该晒网");
                            }else {
                                System.out.println("今天应该打渔");
                            }



                            break;

                        default:
                            System.out.println("选择无效,请重新输入");
                            break;
                    }
                    break;
                        default:
                            System.out.println("选择无效,请重新输入");
                            break;
                    }

        }
        while (num != 2);
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值