数组、方法练习

习题:

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

解题思路:

将15个猴子存入数组,全部设置为活着

开始遍历猴子数组,当存活猴子数量为1的时候,剩下的那个就是猴子王

如果他是活的,就继续报数

当猴子报数到7的时候,就直接设置为死

如果是死的就直接下一个开始报数

public class Test{
    public static void main(String[] args){
        boolean [] monkey = new boolean[15];

        for (int i = 0; i < monkey.length; i++) {
            monkey[i] = true;
        }
        //存活的猴子数量,当为1的时候找到猴子王
        int liveMonkey = monkey.length;



        //报数的变量,每遍历一个猴子,count就自加1,如果等于7了,重新把1赋值给他
        int count = 1;
        //猴子数组的下标,根据标实现遍历猴子
        int index = 0;
        while(liveMonkey > 1){

            if(monkey[index]){
                if(count == 7){
                    monkey[index] = false;

                    count = 1;
                    liveMonkey--;
                }else {
                    count++;
                }
                index++;
                if(index == 15)
                    index = 0;
            }else{
                index++;
                if(index == 15)
                    index = 0;
            }

        }
        //System.out.println("456465");
        for(int i = 0 ; i < monkey.length ; i++){
            if(monkey[i])
                System.out.println("第"+(i+1)+"只猴子是猴子王!");
            //System.out.println(monkey[i]);
        }
    }
}

加密算法

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

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

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

        while(true){

            Scanner in = new Scanner(System.in);
            if (in.hasNextInt()){
                int number = in.nextInt();
                System.out.println("加密后的数是:"+jiami(number));
            }else {
                System.out.println("输入错误,退出加密程序");
            }

        }


    }

    /**
     * 数字反转
     * @param number 反转前的数字
     * @return  反转后数字
     */
    public static int fanzhuan(int number){
        //计算sum的位数
        int number1 = number;
        int count1 = 1;
        int sum = 0;
        while(number1>0){
            count1 *= 10 ;
            number1 = number1/10;

        }
        count1 /= 10;
        System.out.println(count1);
        //数字反转
        while (number >0){
            int a = number % 10;
            sum += a*count1;
            count1 = count1/10;
            number /=10;
        }
        System.out.println("数字反转后:"+sum);
        return sum;
    }

    //加密方法
    public static int jiami(int number){
        //int count = 0;  //计算位数
        int sum = 0;
        int flage = 1;

        while(number>0){

            int a = number%10;
            sum += (a+5)%10*flage;


            number = number/10;
            //count++;
            flage *= 10;
        }

        System.out.println("乘5对十取余后:"+sum);


        int number1 = fanzhuan(sum);
        if(number1 % 2 !=0){
            number1 +=number1+1997;
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值