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

来源:互联网 发布:语音同声翻译软件 编辑:程序博客网 时间:2024/06/10 06:10

记:

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

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

以下正题,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截图

原创粉丝点击