Java从入门到精通章节练习题——第四章

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


Exercise1 判断奇偶数

将变量设成可键盘输入的,方便测试。

package chapter4;

import java.util.Scanner;

/**
 * 判断奇偶数
 */
public class Exercise1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要判断的数字");
        int x = scanner.nextInt();
        if (x == 0 || x % 2 == 0) {
            System.out.println(x  + " 是偶数");
        } else {
            System.out.println(x  + " 是奇数");
        }
    }
}

Exercise 2 输出菱形

数学关系搞清楚,代码就顺其自然。

package chapter4;

/**
 * 输出菱形
 */
public class Exercise2 {
    public static void main(String[] args) {
        System.out.println("1.=====偷懒方法=====");

        //偷懒方法
        //正三角
        for (int i = 1; i <= 9; i++) {
            for (int k = 1; k <= 9 - i; k++) {//根据每行空格数与行数的关系输出空格数
                System.out.print(" ");
            }
            for (int j = 1; j <= 2 * i - 1; j++) {//根据行数与每行*的个数关系输出*的个数
                System.out.print("*");
            }
            System.out.print("\n");
        }
        //倒三角
        for (int i = 1; i <= 8; i++) {
            for (int k = 1; k <=  i; k++) {//根据每行空格数与行数的关系输出空格数
                System.out.print(" ");
            }
            for (int j = 1; j <= 15 + (-2 * (i - 1)); j++) {//根据行数与每行*的个数关系输出*的个数
                System.out.print("*");
            }
            System.out.print("\n");
        }

        //一般方法:先画出17*17正方形,再挖出菱形
        //挖菱形:1——9行一组,10——17行一组
        System.out.println("2.=====一般方法=====");
        for (int i = 1; i <= 17; i++) {
            if (i >= 1 && i <= 9) {//1——9行一组,与上述方法相同,输出正三角
                for (int k = 1; k <= 9 - i; k++) {//根据每行空格数与行数的关系输出空格数
                    System.out.print(" ");
                }
                for (int j = 1; j <= 2 * i - 1; j++) {
                    System.out.print("*");
                }
            } else {//10——17行一组
                for (int k = 1; k <= i - 9; k++) {//根据每行空格数与行数的关系输出空格数
                    System.out.print(" ");
                }
                //需要找出9行以后的行数和每行*个数的对应关系
                for (int j = 1; j <= 15 + (-2 * (i - 9 - 1)); j++) {
                    System.out.print("*");
                }
            }
            System.out.println("");//每行输完换行
        }
    }
}

Exercise3 计算1~20的阶乘的倒数之和

package chapter4;

/**
 * 计算1~20的阶乘的倒数之和
 */
public class Exercise3 {
    public static void main(String[] args) {
        /**
         * @param i 阶数
         * @param sum 求和
         * @param fact 阶乘结果
         */
        int i = 1;
        double sum = 0, fact = 1;
        while (i <= 20) {
            fact *= i;//整数的阶乘
            sum += 1 / fact;//转换成倒数的阶乘,再相加
            i++;
        }
        System.out.println(sum);
    }
}

Exercise4 无重复组合

package chapter4;

/**
 * 无重复组合
 */
public class Exercise4 {
    public static void main(String[] args) {
        
        int count = 0;//计数器
        //利用for循环逐一跳出百、十、个位的数字,最后将其组合成三位数
        for (int i = 4; i <= 7; i++) {
            for (int j = 4; j <= 7; j++) {
                for (int k = 4; k <= 7; k++) {
                    if (i != j && i != k && j != k) {//筛选出不重复的
                        System.out.println(i * 100 + j * 10 + k);//组合成三位数输出
                        count++;
                    }
                }
            }
        }
        System.out.println("能组成 " + count + " 个无重复三位数");
    }
}

Exercise5 查找素数

package chapter4;

/**
 * 查找素数
 */
public class Exercise5 {
    public static void main(String[] args) {
        //素数:大于1的整数中,只能被1和这个数本身整除的数
        int count1 = 0;//因数个数
        int count2 = 0;//1~100素数个数
        for (int i = 1; i <= 100; i++) {//将1~100内的数都遍历一边
            count1 = 0;
            for (int j = 1; j <= i; j++) {
                //将小于等于要判断的数遍历,分别让判断的数(i)除以它(j),
                //用count1记录能被整除的个数
                if (i % j == 0) {
                    count1++;
                }
            }
            if (count1 == 2) {
                //个数为2,说明只能被1和它本身整除,则为素数,用count2计数
                System.out.println(i);
                count2++;
            }
        }
        System.out.println("1~100共有 " + count2 + " 个素数");
    }
}

Exercise6 判断生肖

package chapter4;

import java.util.Scanner;

/**
 * 判断生肖
 */
public class Exercise6 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要判断生肖的年数");
        int year = scanner.nextInt();
        int index = year % 12;
        //公元年号除以12余数是4的年份为鼠年,后面的年份以此类推
        switch (index) {
            case 0:
                System.out.println("猴");
                break;
            case 1:
                System.out.println("鸡");
                break;
            case 2:
                System.out.println("狗");
                break;
            case 3:
                System.out.println("猪");
                break;
            case 4:
                System.out.println("鼠");
                break;
            case 5:
                System.out.println("牛");
                break;
            case 6:
                System.out.println("虎");
                break;
            case 7:
                System.out.println("兔");
                break;
            case 8:
                System.out.println("龙");
                break;
            case 9:
                System.out.println("蛇");
                break;
            case 10:
                System.out.println("马");
                break;
            case 11:
                System.out.println("羊");
                break;
        }
    }
}

Exercise7 摄氏度转华氏度

package chapter4;

/**
 * 摄氏度转华氏度
 */
public class Exercise7 {
    public static void main(String[] args) {
        //华氏度 = 32°F + 摄氏度 × 1.8
        //题中所给摄氏度为-30开头以此递增10的等差数列
        int d = 10;
        int i = 1;
        double a1 = -30;//等差数列首项
        double a = 0;
        do {
            a = a1 + (i - 1) * d;//第i项计算公式
            i++;
            System.out.print("摄氏温度: " + a + "℃");
            System.out.println("\t华氏温度: " + (32 + a * 1.8) + "℉");
        } while (i <= 9);
    }
}

Exercise8 百钱买百鸡

package chapter4;

/**
 * 百钱买百鸡
 */
public class Exercise8 {
    public static void main(String[] args) {
        //利用for循环,遍历每种鸡数可能的组合
        //1.如果钱不用花完
        for (int i = 0; i <= 20; i++) {//假设全买公鸡,最多能买20只
            for (int j = 0; j <= 33; j++) {//假设全买母鸡,最多能买33只
                for (int k = 3; k <= 99; k+=3) {//假设全买雏鸡,最多能买99只
                    if (5 * i + 3 * j + (1 / 3) * k <= 100 && i + j + k == 100) {
                        System.out.println("公鸡:" + i + "只 " + "母鸡:"
                                + j + "只 " + "雏鸡:" + k + "只");
                    }
                }
            }
        }
        System.out.println("===================");
        //2.如果钱花完
        for (int i = 0; i <= 20; i++) {//假设全买公鸡,最多能买20只
            for (int j = 0; j <= 33; j++) {//假设全买母鸡,最多能买33只
                for (int k = 3; k <= 99; k+=3) {//假设全买雏鸡,最多能买99只
                    if ((5 * i + 3 * j + (k / 3)) == 100 && (i + j + k) == 100) {//如果钱花完
                        System.out.println("公鸡:" + i + "只 " + "母鸡:"
                                + j + "只 " + "雏鸡:" + k + "只");
                    }
                }
            }
        }
    }
}


  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

earlytrain9653

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值