猿创征文 | Java知识【综合练习】二

举报
爱吃豆的土豆 发表于 2022/09/25 05:29:38 2022/09/25
6.2k+ 0 0
【摘要】 目录 练习一:数字加密 练习二:数字解密 练习三:抽奖 解法一: 解法二: 练习四:双色球 练习一:数字加密 需求: 某系统的数字密码(大于0),比如1983,采用加密方式进行传输。 规则如下: 先得到每位数,然后每位数都加上5 , 再对10求余,最后将所有数字反转,得到一串新数。 举例: 1 9 8...

目录

练习一:数字加密

练习二:数字解密

练习三:抽奖

解法一:

解法二:

练习四:双色球


练习一:数字加密

需求:

某系统的数字密码(大于0),比如1983,采用加密方式进行传输。

规则如下:

先得到每位数,然后每位数都加上5 , 再对10求余,最后将所有数字反转,得到一串新数。

举例:


     		1	9	8	3
      +5		6   14  13  8
      %10		6   4   3   8
      反转	   8   3   4   6
      加密后的结果就是:8346
  
 

代码示例:  


      public class Test6 {
         public static void main(String[] args) {
             /*
       某系统的数字密码(大于0)。比如1983,采用加密方式进行传输,
       规则如下:
       每位数加上5
       再对10求余,
       最后将所有数字反转,
       得到一串新数。
      */
             //分析:
             //1.把整数里面的每一位放到数组当中
             int[] arr = {1, 9, 8, 3};
             //2.加密
             //每位数加上5
             for (int i = 0; i < arr.length; i++) {
                  arr[i] = arr[i] + 5;
              }
             //再对10求余,
             for (int i = 0; i < arr.length; i++) {
                  arr[i] = arr[i] % 10;
              }
             //将所有数字反转
             for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
                 int temp = arr[i];
                  arr[i] = arr[j];
                  arr[j] = temp;
              }
             //8 3 4 6 --> 8346
             //3.把数组里面的每一个数字进行拼接,变成加密之后的结果
             int number = 0;
             for (int i = 0; i < arr.length; i++) {
                  number = number * 10 + arr[i];
              }
              System.out.println(number);
          }
      }
  
 

拓展:


      public class Test7 {
         public static void main(String[] args) {
             //需求:
             //把整数上的每一位都添加到数组当中
             //反向推导
             //1.计算出数组的长度
             int number = 12345;
             //定义一个变量临时记录number的值,就是为了第三步的时候再次使用
             int temp = number;
             //定义一个变量进行统计
             int count = 0;
             while(number != 0){
                 //每一次循环就去掉右边的一个数字
                  number = number / 10;
                 //去掉一位计数器就自增一次。
                  count++;
              }
             //2.定义数组
             //动态初始化
             int[] arr = new int[count];
             //3.把整数上的每一位都添加到数组当中
             int index = arr.length -1;
             while(temp != 0){//12345
                 //获取temp里面的每一位数组
                 int ge = temp % 10;
                 //再去掉右边的那位数字
                  temp = temp / 10;
                 //把当前获取到的个位添加到数组当中
                  arr[index] = ge;
                  index--;
              }
             //验证结果 1 2 3 4 5
             for (int i = 0; i < arr.length; i++) {
                  System.out.print(arr[i] + " ");
              }
          }
      }
  
 

练习二:数字解密

把上一题加密之后的数据进行解密

代码示例:


      public class Test8 {
         public static void main(String[] args) {
             /*某系统的数字密码(大于0)。比如1983,采用加密方式进行传输,
       规则如下:
       每位数加上5
       再对10求余,
       最后将所有数字反转,
       得到一串新数。
       按照以上规则进行解密:
       比如1983加密之后变成8346,解密之后变成1983
       */
             //1.定义数组记录解密之后的结果
             int[] arr = {8, 3, 4, 6};
             //2.反转
             for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
                 int temp = arr[i];
                  arr[i] = arr[j];
                  arr[j] = temp;
              }
             //3.由于加密是通过对10取余的方式进行获取的
             //所以在解密的时候就需要判断,0~4之间+10 5~9数字不变
             for (int i = 0; i < arr.length; i++) {
                 if (arr[i] >= 0 && arr[i] <= 4) {
                      arr[i] = arr[i] + 10;
                  }
              }
             //4.每一位减5
             for (int i = 0; i < arr.length; i++) {
                  arr[i] = arr[i] - 5;
              }
             //5.获取数组里面的每一位数字拼接成最终的结果
             int number = 0;
             for (int i = 0; i < arr.length; i++) {
                  number = number * 10 + arr[i];
              }
              System.out.println(number);
          }
      }
  
 

练习三:抽奖

需求:

一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)


      888元的奖金被抽出
      588元的奖金被抽出
      10000元的奖金被抽出
      1000元的奖金被抽出
      2元的奖金被抽出
  
 

解法一:


      public class Test9 {
         public static void main(String[] args) {
             /* 需求:
       一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。
       请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
       打印效果如下:(随机顺序,不一定是下面的顺序)
       888元的奖金被抽出
       588元的奖金被抽出
       10000元的奖金被抽出
       1000元的奖金被抽出
       2元的奖金被抽出
       */
             //分析:
             //1.定义数组表示奖池
             int[] arr = {2, 588, 888, 1000, 10000};
             //2.定义新数组用于存储抽奖的结果
             int[] newArr = new int[arr.length];
             //3.抽奖
             Random r = new Random();
             //因为有5个奖项,所以这里要循环5次
             for (int i = 0; i < 5; ) {
                 //获取随机索引
                 int randomIndex = r.nextInt(arr.length);
                 //获取奖项
                 int prize = arr[randomIndex];
                 //判断当前的奖项是否存在,如果存在则重新抽取,如果不存在,就表示是有效奖项
                 boolean flag = contains(newArr, prize);
                 if(!flag){
                     //把当前抽取到的奖项添加到newArr当中
                      newArr[i] = prize;
                     //添加完毕之后,移动索引
                      i++;
                  }
              }
             //4.遍历newArr
             for (int i = 0; i < newArr.length; i++) {
                  System.out.println(newArr[i]);
              }
          }
         //判断prize在数组当中是否存在
         //存在:true
         //不存在:false
         public static boolean contains(int[] arr,int prize){
             for (int i = 0; i < arr.length; i++) {
                 if(arr[i] == prize){
                     return true;
                  }
              }
             return false;
          }
      }
  
 

解法二:


      public class Test10 {
         public static void main(String[] args) {
            /* 需求:
       一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。
       请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
       打印效果如下:(随机顺序,不一定是下面的顺序)
       888元的奖金被抽出
       588元的奖金被抽出
       10000元的奖金被抽出
       1000元的奖金被抽出
       2元的奖金被抽出
       */
             //1.把奖池里面的所有奖项打乱顺序
             int[] arr = {2, 588, 888, 1000, 10000};
             Random r = new Random();
             for (int i = 0; i < arr.length; i++) {
                 //获取随机索引
                 int randomIndex = r.nextInt(arr.length);
                 //拿着i跟随机索引randomIndex上的值进行交换
                 int temp = arr[i];
                  arr[i] = arr[randomIndex];
                  arr[randomIndex] = temp;
              }
             //2.遍历奖池,从0索引开始获取每一个奖项
             for (int i = 0; i < arr.length; i++) {
                  System.out.println(arr[i]);
              }
          }
      }
  
 

练习四:双色球


      public class Test11 {
         public static void main(String[] args) {
             //1.生成中奖号码
             int[] arr = createNumber(); // 123456 7
              System.out.println("=======================");
             for (int i = 0; i < arr.length; i++) {
                  System.out.print(arr[i] + " ");
              }
              System.out.println("=======================");
             //2.用户输入彩票号码(红球 + 蓝球)//654321
             int[] userInputArr = userInputNumber();
             //3.判断用户的中奖情况
             //红球 蓝球
             int redCount = 0;
             int blueCount = 0;
             //判断红球
             for (int i = 0; i < userInputArr.length - 1; i++) {
                 int redNumber = userInputArr[i];
                 for (int j = 0; j < arr.length - 1; j++) {
                     if(redNumber == arr[j]){
                          redCount++;
                         //如果找到了,那么后面的数字就没有必要继续比较了
                         //跳出内循环,继续判断下一个红球号码是否中奖
                         break;
                      }
                  }
              }
             //判断蓝球
             int blueNumber = userInputArr[userInputArr.length-1];
             if(blueNumber == arr[arr.length - 1]){
                  blueCount++;
              }
             //根据红球的个数以及蓝球的个数来判断中奖情况
             if(redCount == 6 && blueCount == 1){
                  System.out.println("恭喜你,中奖1000万");
              }else if(redCount == 6 && blueCount == 0){
                  System.out.println("恭喜你,中奖500万");
              }else if(redCount == 5 && blueCount == 1){
                  System.out.println("恭喜你,中奖3000");
              }else if((redCount == 5 && blueCount == 0) ||  (redCount == 4 && blueCount == 1)){
                  System.out.println("恭喜你,中奖200");
              }else if((redCount == 4 && blueCount == 0) ||  (redCount == 3 && blueCount == 1)){
                  System.out.println("恭喜你,中奖10");
              }else if((redCount == 2 && blueCount == 1) ||  (redCount == 1 && blueCount == 1)|| (redCount == 0 && blueCount == 1)){
                  System.out.println("恭喜你,中奖5");
              }else{
                  System.out.println("谢谢参与,谢谢惠顾");
              }
          }
         public static int[] userInputNumber() {
             //1.创建数组用于添加用户购买的彩票号码
             //6个红球 1个蓝球 数组长度:7
             int[] arr = new int[7];
             //2.利用键盘录入让用输入
             Scanner sc = new Scanner(System.in);
             //让用户输入红球号码
             for (int i = 0; i < 6; ) {
                  System.out.println("请输入第" + (i + 1) + "个红球号码");
                 int redNumber = sc.nextInt();
                 //redNumber 在1~33 唯一不重复
                 if (redNumber >= 1 && redNumber <= 33) {
                     boolean flag = contains(arr, redNumber);
                     if (!flag) {
                         //不存在
                         //有效的,可以添加到数组当中
                          arr[i] = redNumber;
                          i++;
                      } else {
                         //存在
                          System.out.println("当前红球号码已经存在,请重新输入");
                      }
                  } else {
                      System.out.println("当前红球号码超出范围");
                  }
              }
             //让用户输入篮球号码
              System.out.println("请输入篮球号码");
             //1~16
             while (true) {
                 int blueNumber = sc.nextInt();
                 if (blueNumber >= 1 && blueNumber <= 16) {
                      arr[arr.length - 1] = blueNumber;
                     break;
                  } else {
                      System.out.println("当前篮球号码超出范围");
                  }
              }
             return arr;
          }
         public static int[] createNumber() {
             //1.创建数组用于添加中奖号码
             //6个红球 1个蓝球 数组长度:7
             int[] arr = new int[7];
             //2.随机生成号码并添加到数组当中
             //红球:不能重复的 1 2 3 4 5 6
             //蓝球:可以跟红球号码重复 5
             //生成红球号码并添加到数组当中
             Random r = new Random();
             for (int i = 0; i < 6; ) {
                 //获取红球号码
                 int redNumber = r.nextInt(33) + 1;
                 boolean flag = contains(arr, redNumber);
                 if (!flag) {
                     //把红球号码添加到数组当中
                      arr[i] = redNumber;
                      i++;
                  }
              }
             //生成蓝球号码并添加到数组当中
             int blueNumber = r.nextInt(16) + 1;
              arr[arr.length - 1] = blueNumber;
             return arr;
          }
         //用于判断数组在数组中是否存在
         public static boolean contains(int[] arr, int number) {
             for (int i = 0; i < arr.length; i++) {
                 if (arr[i] == number) {
                     return true;
                  }
              }
             return false;
          }
      }
  
 

文章来源: qianxu.blog.csdn.net,作者:爱吃豆的土豆,版权归原作者所有,如需转载,请联系作者。

原文链接:qianxu.blog.csdn.net/article/details/126903228

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。