Java第三次实验作业(山东大学)

实验题目:

1、用while循环语句,计算1–200之间的所有3的倍数之和。
2、利用switch语句实现判断某年的某个月份有几天的程序。
3、水仙花数是指其个位、十位和百位上三个数的立方之和等于这个数本身。通过循环,判断100-999之间所有的数字,符合水仙花数条件的数字。
(例如:1^3 + 5^3 + 3^3 = 153)
4、已知 XYZ + YZZ = 532,其中X、Y和Z为数字,编程求出X、Y和Z的值。
5、编程实现“百钱买百鸡”问题。母鸡5分钱一只,公鸡三分钱一只,小鸡一分钱三只,现在有百钱欲买百鸡,有多少种买法?程序分别用三种方法来写,
第一方法是程序中有三层的循环,这个效率最低,第二方法是程序采用两层循环实现,第三方法是程序采用一层循环实现。
6、一个整数的各位数字之和能被9整除,则该数也能被9整除。验证这个定理的正确性。
注:验证从0–2147483647的整数中是否存在不符合该定理的数,若不存在即验证通过,验证时间可能需要2-4分钟,请耐心等待,但如果时间太长,务必思考为什么…
7、有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问2年后的兔子总数为多少?(尝试用递归编程实现)

实验1

用while循环语句,计算1–200之间的所有3的倍数之和。

实验源程序:

package Three;

public class ThreeMultiples //
{
    public static void main(String[] args) {
        int i=1,sum=0;
        while(i<=200) {
            //除以3余数为零则是3的倍数
            if(i%3==0)
                sum+=i;
            i++;
        }
        System.out.print("1-200内的3的倍数的和为:"+sum);
    }

}

实验运行结果:

实验2:

利用switch语句实现判断某年的某个月份有几天的程序。

实验源代码:

package Three;
//本次需要用到Scanner.
import java.util.Scanner;
public class SwitchDay {
    public static void main(String[] args) {
        System.out.println("输入年份:");
        Scanner scanyear = new Scanner(System.in);
        int year = scanyear.nextInt();
        Scanner scanmonth = new Scanner(System.in);
        System.out.print("输入月份:");
        int month = scanmonth.nextInt();
        //判断闰年
        if((year%4==0&&year%100!=0)||year%400==0) {
            switch(month) {
                case 1: System.out.println("该月份有31天");break;
                case 2: System.out.println("该月份有29天");break;
                case 3: System.out.println("该月份有31天");break;
                case 4: System.out.println("该月份有30天");break;
                case 5: System.out.println("该月份有31天");break;
                case 6: System.out.println("该月份有30天");break;
                case 7: System.out.println("该月份有31天");break;
                case 8: System.out.println("该月份有31天");break;
                case 9: System.out.println("该月份有30天");break;
                case 10: System.out.println("该月份有31天");break;
                case 11: System.out.println("该月份有30天");break;
                case 12: System.out.println("该月份有31天");break;
            }
        }
        //非闰年的情况
        else
            switch(month) {
                case 1: System.out.println("该月份有31天");break;
                case 2: System.out.println("该月份有28天");break;
                case 3: System.out.println("该月份有31天");break;
                case 4: System.out.println("该月份有30天");break;
                case 5: System.out.println("该月份有31天");break;
                case 6: System.out.println("该月份有30天");break;
                case 7: System.out.println("该月份有31天");break;
                case 8: System.out.println("该月份有31天");break;
                case 9: System.out.println("该月份有30天");break;
                case 10: System.out.println("该月份有31天");break;
                case 11: System.out.println("该月份有30天");break;
                case 12: System.out.println("该月份有31天");break;
            }
    }
}

实验运行结果:

实验3

水仙花数是指其个位、十位和百位上三个数的立方之和等于这个数本身。通过循环,判断100-999之间所有的数字,符合水仙花数条件的数字。

(例如:1^3 + 5^3 + 3^3 = 153)

实验源代码:

package Three;

public class NarcissisticNumber {
    public static void main(String[] args) {
        int hundred, ten, one, sum;
        for (int i = 100; i < 1000; i++) {
            hundred = (i / 100);
            ten = (i - hundred * 100) / 10;
            one = i - hundred * 100 - ten * 10;
            sum = (hundred * hundred * hundred) + (ten * ten * ten) + (one * one * one);
            if (sum == i) {
                System.out.println(i);
            }
        }
    }
}

实验4

已知 XYZ + YZZ = 532,其中X、Y和Z为数字,编程求出X、Y和Z的值。

实验源代码:

package Three;

public class Equation {
    public static void main(String[] args) {
        int X,Y,Z;
        //X从开始遍历,因为X有百位,下面的Y同理
        for(X=1;X<10;X++) {
            //Y从开始遍历
            for(Y=1;Y<10;Y++) {
                //Z从开始遍历,他没有百位
                for(Z=0;Z<10;Z++) {
                    //满足条件就输出结果
                    if(X*100+Y*10+Z+Y*100+Z*10+Z==532)
                        System.out.println("X = "+X+" Y = "+Y+" Z = "+Z);
                }
            }
        }
    }

}

实验运行结果:

实验5

编程实现“百钱买百鸡”问题。母鸡5分钱一只,公鸡三分钱一只,小鸡一分钱三只,现在有百钱欲买百鸡,有多少种买法?程序分别用三种方法来写,

第一方法是程序中有三层的循环,这个效率最低,第二方法是程序采用两层循环实现,第三方法是程序采用一层循环实现。

实验源代码:

三层循环

package Three;

public class MoneyChickenThree {
    public static void main(String[] args) {
        //公鸡数量Male,母鸡数量Female,小鸡数量Chick
        int Male, Female, Chick=0;
        //公鸡数量范围
        for (Male = 0; Male <= 100; Male++) {
            //母鸡数量范围
            for (Female = 0; Female <= 100; Female++) {
                //消极数量范围
                for (Chick = 0; Chick <= 100; Chick++) {
                    //约束条件
                    if (Male + Female + Chick == 100) {
                        //约束条件
                        if (5 * Female + 3 * Male + Chick / 3 == 100 && Chick % 3 == 0)
                            System.out.println("可购买" + Male + "只公鸡 " + Female + "只母鸡" + Chick + "只小鸡");
                    }
                }
            }
        }
    }
}

二层循环

package Three;

public class MoneyChickenTwo {
    public static void main(String[] args) {
        //公鸡数量Male,母鸡数量Female,小鸡数量Chick
        int Male,Female,Chick=0;
        //母鸡数量范围
        for(Female=0;Female<=100/5;Female++) {
            //公鸡数量范围
            for(Male=0;Male<=100/3;Male++) {
                //小鸡数量
                Chick=100-Male-Female;
                //约束条件
                if(5*Female+3*Male+Chick/3==100&&Chick%3==0)
                    System.out.println("可购买"+Male+"只公鸡 "+Female+"只母鸡"+Chick+"只小鸡");

            }
        }
    }
}

一层循环

package Three;

public class MoneyChickenOne {
    public static void main(String[] agrs) {
        int Male,Female,Chick=0;
        for(Female=0;Female<=100/5;Female++) {
            Male = (100 - 7 * Female) / 4;
            Chick = (300 + 3 * Female) / 4;
            if((Chick%3==0)&&Male>0&&(Male+Female+Chick==100)&&(5*Female+3*Male+Chick/3==100))
                System.out.println("可购买" + Male + "只公鸡" + Female + "只母鸡" + Chick + "只小鸡");
        }
    }
}

实验运行结果:

实验6:

一个整数的各位数字之和能被9整除,则该数也能被9整除。验证这个定理的正确性。

注:验证从0–2147483647的整数中是否存在不符合该定理的数,若不存在即验证通过,验证时间可能需要2-4分钟,请耐心等待,但如果时间太长,务必思考为什么…

实验源程序:

package Three;

public class Verification {
    public static void main(String[] args) {
        //定义长整形变量
        long i=0,j=0;
        for(i=0;i<=2147483647;i++) {
            //每循环一个数,j置零
            j=0;
            long k=i;
            while(k > 0) {
                //累加各位数
                j += k % 10;
                //去掉最低位
                k = k / 10;
            }
            //验证整数各位数字之和能被9整除
            if(j % 9==0) {
                //验证这个整数本身能否被9整除
                if(i % 9!=0) {
                    System.out.println(i+"的各位数字之和能被9整除,但该数不能被9整除");
                }
            }
            if(i>=2147483647)
                System.out.println("0--2147483647的整数中不存在不符合该定理的数")  ;
        }
    }
}

实验运行结果:

实验7:

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问2年后的兔子总数为多少?(尝试用递归编程实现)

实验源代码:

package Three;

public class RabbitNumber {
    public static void main(String[] args) {
        //时间24个月
        int i = 24;
        //调用sum输出兔子数目
        System.out.println("2年后的兔子总数为" + sum(i)+"对");
    }
    //静态方法,方法名叫sum,需要传递一个参数为int,并且返回值也是一个int
    public static int sum(int month) {
        if (month == 1 || month == 2)
            return 1;
        else
            return sum(month - 1) + sum(month - 2);
    }
}

实验运行结果:

© 版权声明
THE END
喜欢就支持以下吧
点赞1赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容