day_7/12(方法的练习3)

练习1:

数字资产的概念被提出来,用于给数字资产加密的业务变得非常火热,现有一套用于给数字资产加密的系统专门用于产生加密密码,请设计一个方法用于给数字密码进行加密。

加密规则如下:根据数字长度的每位数,给每位数+5,再对10求余,最后将所有数字反转,得到的新数,如果是奇数请加上1997,否则就是这个新数。

        分析:根据题意,需要用到Scanner类,然后逐个提取每位数,每位数按规则变换,之后把变换后的数翻转过来,我的思路是原数提取最低位,变换之后给新数,之后原数除以10,去掉最低位,新数乘以10低位变高位,这里我定义数据类型为int,所以有个小问题,用户输入的数最多就是9位,如果要是10位的话,那么第一位必须是1或2,因为int类型的数据取值范围是:-2^31 ---- 2^31-1 ,即:-2147483648 - 2147483647,下面看代码实现

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //创建Scanner对象
        Scanner sc = new Scanner(System.in);
        //提示用户输入
        System.out.println("请输入1~9位数字密码:");
        //获取数据
        int x = sc.nextInt();
        //调用函数,输出加密后的密码
        System.out.println("你输入的密码"+x+"加密后为" + encryption(x));
    }
    public static int encryption(int psw) {
        //创建一个临时变量来存储改变后的数字
        int temp = 0;
        while (psw != 0) {
            //新数乘以10
            temp *= 10;
            //提取最低位,并按规则加密
            temp += ((psw % 10) + 5) % 10;
            //原数除以10
            psw /= 10;
        }
        //根据需求求,判断新数是否为奇数,为奇数则加上1997
        if (1 == temp % 2) {
            temp += 1997;
        }
        //返回加密后的密码
        return temp;
    }
}

练习2:求猴子大王

15个猴子围成一圈选大王,依次1-7循环报数,报到7的猴子被淘汰,直到最后一只猴子称为大王,问:哪只猴子会成为大王?

        分析:根据需求,我的思路是,用一个长度为15的数组来代表15只猴子,之后循环14次,给报数报到7的猴子标记为9,淘汰14只猴子,剩下的那一个就是猴子王,在报数的时候,当前猴子报到就就标记为几,最后淘汰14只猴子之后,遍历一下数组,标记不是9的就是猴子王,代码如下

public class Test {
    public static void main(String[] args) {
        monkeyKing();
    }

    public static void monkeyKing() {
        //定义一个长度为15的数组,用于每个猴子的标记
        int[] monkey = new int[15];
        //定义一个变量用于索引,应为在报数的时候遇到已经淘汰了的猴子
        //或者报完数后的猴子索引都要加1
        int index = 0;
        //循环14次报数,淘汰14只猴子
        for (int i = 0; i < monkey.length - 1; i++) {
            //从1开始报数,到7结束
            for (int j = 1; j < 8; j++) {
                //判断当前猴子是否标记为9,即是否已经淘汰
                if (9 != monkey[index]) {
                    //判断没淘汰的猴子标记是否为7,如果是7,就给当前猴子标记为9,
                    if (7 == j) {
                        monkey[index] = 9;
                    } else {
                        //猴子标记不为9也不为7,则正常报数,标记为当前该报的数
                        monkey[index] = j;
                    }
                    //判断猴子是否淘汰或报数后,索引加1,轮到下一个猴子讲话
                    index++;
                    //这里要注意,索引一直在加,但是15个猴子轮完之后又要从第一个猴子开始
                    index %= monkey.length;
                } else {
                    //如果当前猴子被淘汰了,则当前猴子不报数,j先减1,下次循环又会加回来
                    j--;
                    //猴子不报数,直接到下一只猴子,所以索引也是加1
                    index++;
                    //同上
                    index %= monkey.length;
                }
            }
        }
        //循环14次之后,也就是淘汰14只猴子后,剩下的一只就是猴子王
        //遍历猴子列表,标记不为9的就是猴子王
        for (int i = 0; i < monkey.length; i++) {
            if (monkey[i] != 9) {
                //索引15只猴子的索引是0~14,我们在数的时候是从一开始的
                //所以这里是索引加上1
                System.out.println("第" + (i + 1) + "只猴子是大王");
            }
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值