day_3

day3

有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

public static int age(int n){
    if (n == 1){
        return 10;  //递归函数的出口
    }else{
        return age(n - 1)+2;  //函数递归调用函数本身
    }
}
public static void main(String[] args) {
    System.out.println("第五个人:"+age(5));
}

运行结果:

image-20230712194355849

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第10个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21…

//使用递归
public static int count(int n){
    if(n == 1 || n == 2){
        return 1;
    }else{
        return count(n-2)+count(n-1); //递归
    }
}
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入月份:");
    int n = scanner.nextInt();
    if (n < 1){
        System.out.println("数据错误");
    }else{
        System.out.println("第"+n+"个月兔子总数:"+count(n)*2);
    }
}

//使用循环而不用递归
 public static void main(String[] args) {
//        count1();
        count2();
    }

    public static void count1(){
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入查询月:");
        int n = scanner.nextInt();
        int[] array = new int[12];
        for (int i = 1; i <=12 ; i++) {
            if (i == 1 || i == 2) {
                array[i-1] = 1;
            }else {
                array[i-1] = array[i-3] + array[i-2];
            }
        }
        System.out.println("第"+n+"个月的兔子总数:"+array[n-1]*2);
    }

    private static void count2() {
        int a = 0;      //上上的月
        int b = 0;      //上个月
        int now = 0;    //当前月
        for (int i = 1; i <= 10; i++) {
            if (i == 1 || i == 2 ) {//1月和2月
                now = 1;
                a = 1;
                b = 1;
            }else { //从第三个月开始
                now = a + b; //前两个月的和
                a = b;
                b = now;
            }
        }
        System.out.println("第10个月的兔子:"+ now*2);
    }

运行结果:

在这里插入图片描述

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方,如果开方后的结果满足完全平方数 , 则输出该数

public static void main(String[] args) {
        int x;
        for (int i = 0; i <10*10000 ; i++) {
            // 判断数据是否为完全平方数
            if ( Math.sqrt(i + 100) % 1 == 0 && Math.sqrt(i + 100+ 168 ) % 1 == 0){
                System.out.println("符合"+i);
            }
        }
}

运行结果:

image-20230712201330146

九九乘法表
– 双重for循环:外层循环控制行数(9行),内层循环控制每行的列数(1,2,3,…9)

public static void main(String[] args) {
    for (int i = 1; i <= 9; i++) {//外层循环控制行数
        for (int j = 1; j <= i ; j++) {//内层循环控制每行的列数(i从1,2,3逐渐变化到9)
            System.out.print(j + "*" + i + "="+i*j+"\t");
        }
        System.out.println();
    }
}

运行结果:

image-20230712201500251

题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。

//素数: 只能被1和本身整除的数据是素数
public static void main(String[] args) {
    int num = 0;
    for (int a = 101; a <=200  ; a++) {
        boolean flag = true;//表示是素数
        for ( int i = 2 ;i <=Math.sqrt(a); i++) {//   i <=Math.sqrt(a) : 减少for循环的次数
            if (a % i == 0) {
                flag = false;   // 不是素数
                break;
            }
        }
        if (flag) {
            System.out.println(a + "是素数");
            num++;
        }
    }
    System.out.println("素数的总数:"+num);
}

运行结果:

image-20230712201609320

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。

public static void main(String[] args) {
    for (int num = 1; num <= 1000; num++) {
        int sum = 0;
        String str = "";
        for (int i = 1; i < num; i++) {
            if (num % i == 0) {//能除
                sum = sum + i;
                if (i == 1){
                    str = str + i;
                }else{
                    str = str + "+" + i ;
                }
            }
        }
        if (num == sum){
            System.out.println(num+"是完数:"+num+"="+str);
        }
    }
}

运行结果:

image-20230712201705229

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

public static void main(String[] args) {
        int x = 0;
        for (int i = 1; i <=4; i++) {//百位数
            for (int j = 1; j <=4 ; j++) {//十位数
                for (int k = 1; k <=4 ; k++) {//个位数
                    //去掉重复的)
//                    if (i != j && j != k && i != k) {
//                        System.out.println("" + i + j + k);
//                    }
                    if (i == j || j == k || i == k)    {
                        continue;
                    }
                    System.out.println("" + i + j + k);
                }
            }
        }
    }

运行结果:

image-20230712201905971

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。从键盘输入一个四位数,然后输出加密之后数据

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个4位数:");
        int num = scanner.nextInt();
        int[] arr = new int[4];
        arr[0] = num /1000;//千
        arr[1] = num /100%10;//百
        arr[2] = num /10 % 10;//十
        arr[3] = num % 10;//个
//        加5,和除以10代替
        for (int i = 0; i <=3 ; i++) {
            arr[i] = (arr[i]+5)%10;
//            System.out.println(arr[i]);
        }
//        1、4,交换
        int temp = 0;
        temp = arr[0];
        arr[0] = arr[3];
        arr[3] = temp;
//        2、3交换
        temp = arr[1];
        arr[1] = arr[2];
        arr[2] = temp;
        System.out.print("加密数据为:");
        for (int i = 0; i <arr.length; i++) {
            System.out.print(+arr[i]);
        }
    }

运行结果:

image-20230712202041212

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

A码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值