初学者日志 12/23 循环结构练习


记:

差不多有二十多天了,暂时没有遇到太多超出自己承受范围之外的东
西,其实感觉还不错,常常会有一种回到了高中做数学题的时候的错
觉。

但在文科太久了,突然到了男生群聚的地方,总会有一种不适应感。

以下正题,practice10是将从控制台获取的数据进行重组,我暂时没
能做出来,留待日后解决,这里说明。

package lianxi;

import java.util.Scanner;

/**
 * @author 一条子非鱼的沫
 * @see 循环结构练习
 */
public class lianxi01 {
    public static void main(String[] args) {
        // 【运行方法】将此条内容以下需要运行的自定义方法取消注释后即可运行。
        //ps:由于Scanner指向不明的问题,每一个practice只能单独运行
        practice01();// 回文数
//      practice02();// 兔子问题
//      practice03();// 判断素数
//      practice04();// 水仙花数
//      practice05();// 公约数与公倍数
//      practice06();// 九九乘法表
//      practice07();// 猴子问题
//      practice08();// 求位数并打印
//      practice09();// 打印菱形
//      practice10();// 重组数字
    }

    /**
     * practice01:【回文数】
     * 
     * @see 一个五位数,判断一个它是不是回文数
     * @see 回文数即以中间位置的数为中心,呈左右对称的数。例如:15251
     */
    public static void practice01() {
        Scanner input = new Scanner(System.in);
        int number;
        do {
            System.out.print("请输入一个五位数:");
            number = input.nextInt();// 输入一个int类型的五位数
        } while (number < 10000 || number > 99999);
        String str = String.valueOf(number);// 把number的值转化为string类型
        char[] ch = str.toCharArray();// 将string类型的数组转换为char型的数组
        if (ch[0] == ch[4] && ch[1] == ch[3]) {// 如果第一个数与第五个数、第二个数与第四个数相等
            System.out.println("这个数是回文数");
        } else {
            System.out.println("这个数不是回文数");
        }
        input.close();
    }

    /**
     * practice02:【兔子问题】
     * 
     * @see 有一对兔子,从出生后第三个月起,每个月都生一对兔子,
     * @see 小兔子长到第三个月后,每个月又生一对兔子,
     * @see 假如兔子都不死,问每个月的兔子总数为多少?
     */
    public static void practice02() {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入周数(大于2):\t");
        int month = input.nextInt();
        System.out.println("第1个月兔子的对数为:\t1");
        System.out.println("第2个月兔子的对数为:\t1");
        int f1 = 1;// 上上个月兔子总数
        int f2 = 1;// 上个月兔子总数
        int f0;// 用于中转使用的量
        int i = 3;
        int sum = 0;
        for (; i <= month; i++) {
            f0 = f1;
            f1 = f1 + f2;// 新一个月兔子总数为上个月兔子总数加上上个月兔子的总数
            f2 = f0;
            sum += f1;
            System.out.println("第" + i + "个月兔子的对数为:\t" + f1);
        }
        System.out.println("截止第" + (i - 1) + "个月,兔子对数总和为:\t" + sum);
        input.close();
    }

    /**
     * practice03:【判断素数】
     * 
     * @see 及合数的质因数: 从控制台输入一个数,判断它是不是素数,
     * @see 如果是,输出这个数; 如果不是,分解出这个数的所有质因数。
     */
    public static void practice03() {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个正整数:");
        int number = input.nextInt();
        int i = 2;// i表示输入数字的质因数的初始化
        System.out.print(number + "=");
        while (i <= number) {// 分解出的质因数一定小于等于原数
            if (i == number) {// 如果用于验证的质因数等于原数,则代表着这个原数本身就是质数
                System.out.print(number);// 输出原数,即为它本身唯一的质因数
                break;// 已经分解出所有情况,跳出循环体
            } else if (number % i == 0) {// 如果原数能够被用于验证的质因数整除,则输出这个质因数
                System.out.print(i + "*");
                number /= i;// 原数除以验证过的质因数后,将得出的商赋值给原数,进行下一次验证
            } else {
                i++;// 如果原数不能被用于验证的质因数整除,则使用新的用于验证的质因数后再次执行上一步
            }
        }
        input.close();
    }

    /**
     * practice04:【水仙花数】
     * 
     * @see 打印出所有水仙花数。
     * @see 水仙花数,即一个各位数字的立方和等于这个数字本身的三位数。如:135=(1*1*1)+(3*3*3)+(5*5*5);
     */
    public static void practice04() {
        System.out.print("所有水仙花数有:");
        for (int i = 100; i < 1000; i++) {
            int a = i % 10;// a表示i的个位数
            int b = i / 10 % 10;// b表示i的十位数
            int c = i / 100;// c表示i的百位数
            if (a * a * a + b * b * b + c * c * c == i) {// 如果立方和等于原数
                System.out.print(i + " ");
            }
        }
    }

    /**
     * practice05:【公约数与公倍数】
     * 
     * @see 从控制台输入两个大小不同的数
     * @see 求它们的最大公约数与最小公倍数
     */
    public static void practice05() {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入正整数一:");
        int m = input.nextInt();
        System.out.print("请输入正整数二:");
        int n = input.nextInt();
        int max = 0, min = 0;// 定义一个较大值和较小值,对所输入的数字进行大小比较
        if (m == n || m < 2 || n < 2) {// 如果输入的两个数字相等,或者它们出现小于2的数
            System.out.print("输入错误,请重新输入");// 则提示用户重新输入
            // 另外,排除不符合的情况后,再比较两个输入数字的大小,分别把它们赋值给较大值和较小值
        } else if (m > n) {
            max = m;
            min = n;
        } else {
            max = n;
            min = m;
        }
        System.out.print("它们之间的最大公约数为:");
        for (int i = min; i >= 2; i--) {// 从较小值向2
            if (min % i == 0 && max % i == 0) {// 如果两个数除以同一个i都没有余数,i就是它们的公约数
                System.out.print(i + " ");
                break;// 由于i的值是从大向小进行运算,所以得出的第一个i的值几位它们的最大公约数
            }
        }
        System.out.print("它们之间的最小公倍数为:");
        for (int i = max; i <= max * min; i++) {// 从较大值向两个值的乘积
            if (i % min == 0 && i % max == 0) {// 如果同一个i分别除以这两个数都没有余数,i就是它们的公倍数
                System.out.print(i + " ");
                break;// 由于i的值是从较大值向两个值的乘积进行运算,所以得出的第一个i的值即为它们的最小公倍数
            }
        }
        input.close();
    }

    /**
     * practice06:【九九乘法表】
     * 
     * @see 制作一个九九乘法表
     */
    public static void practice06() {
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + i * j + "\t");
            }
            System.out.println();
        }
    }

    /**
     * practice07:【猴子问题】
     * 
     * @see 猴子第一天摘下若干桃子,当即吃了一半,吃完觉得不过瘾,又吃了一个
     * @see 第二天,猴子吃了剩下桃子的一半,吃完觉得不过瘾,又吃了一个
     * @see 以后每天都吃了剩下的一半,吃完觉得不过瘾,又吃了一个
     * @see 到第10天时,猴子想再吃时,发现桃子只剩下一个了
     * @see 问:第一天猴子摘了多少个桃子?
     */
    public static void practice07() {
        int peach = 1;// peach表示桃子,初始值为1,表示第十天剩下1个桃子
        for (int i = 10; i >= 1; i--) {// 从第十天开始向第一天回算
            peach = peach * 2 + 2;// 前一天的桃子数目是后一天的二倍加二个
        }
        System.out.println("第1天总共摘了" + peach + "个桃子");
    }

    /**
     * practice08:【求位数并打印】
     * 
     * @see 从控制台输入一个整数,请获取它的位数,并逆序打印各位上的数字
     */
    public static void practice08() {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个整数:");
        long number = input.nextLong();// 定义数据类型为长整型
        int digit = 1;// 定义这个数的位数,初始为1位
        System.out.print("这个数各位逆序打印为:");
        System.out.print(number % 10 + " ");// 取出这个数的个位数
        while (number / 10 != 0) {// 如果这个数的位数大于等于两位
            number /= 10;// 将这个数逐渐除以10,得出的余数即依次为:十、百、千……
            System.out.print(number % 10 + " ");
            digit++;// 此时该数的位数也相应第增加1
        }
        System.out.print("\n这个数的位数为:" + digit);
        input.close();
    }

    /**
     * practice09:【打印菱形】
     * 
     * @see 使用循环结构打印出一个菱形,菱形的元素为“*”号;
     */
    public static void practice09() {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入菱形的边长:\t");
        int side = input.nextInt();
        System.out.println("菱形的打印图如下:");
        for (int i = 1; i <= side; i++) {// 进行上半部分,包括*号最多的一行在内
            for (int j = 1; j <= side * 2 - i * 2; j++) {// 每一行空格个数为:side*2-i*2
                System.out.print(" ");
            }
            for (int j = 1; j <= i * 2 - 1; j++) {// 每一行*号个数为:i*2-1
                System.out.print("* ");// 输出时*号与*号间有空格,所以整个程序乘以2进行运算
            }
            System.out.println();// 输出每一行的空格和*号之后要进行换行
        }
        for (int i = 1; i <= side - 1; i++) {// 进行下半部分,不包括*号最多的一行在内
            for (int j = 1; j <= i * 2; j++) {// 每一行的空格数为:i*2
                System.out.print(" ");
            }
            for (int j = 1; j <= side * 2 - i * 2 - 1; j++) {
                // 每一行*号个数为:side*2-i*2-1
                System.out.print("* ");// 输出时*号与*号间有空格,所以整个程序乘以2进行运算
            }
            System.out.println();// 输出每一行的空格和*号之后要进行换行
        }
        input.close();
    }

    /**
     * practice10:【重组数字】
     * 
     * @see 有四个各不相同的非零数字,用它们重组成各不相同的三位数,能够组成多少个?
     */
    public static void practice10() {// 【未完成】
        Scanner input = new Scanner(System.in);
        System.out.print("请输入第1个数字:");
        int a = input.nextInt();
        System.out.print("请输入第2个数字:");
        int b = input.nextInt();
        System.out.print("请输入第3个数字:");
        int c = input.nextInt();
        System.out.print("请输入第4个数字:");
        int d = input.nextInt();
        if (a == 0 || b == 0 || c == 0 || d == 0 || a > 9 || b > 9 || c > 9 || d > 9 || a == b || b == c || c == d
                || a == c || b == d) {
            System.out.print("你所输入的数字有误!");
            System.exit(0);
        }
        input.close();
    }
}

以下为程序输出效果截图:

ps. practice10由于没做出来,所以没有截图。

1、目录截图
practice目录截图

2、practice01
practice01截图

3、practice02
practice02截图

4、practice03
practice03截图

5、practice04
practice04截图

6、practice05
practice05截图

7、practice06
practice06截图

8、practice07
practice07截图

9、practice08
practice08截图

10、practice10
practice09截图

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值