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

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

目录

练习一:数字加密

练习二:数字解密

练习三:抽奖

解法一:

解法二:

练习四:双色球


练习一:数字加密

需求:

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

规则如下:

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

举例:


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

代码示例:  


  
  1. public class Test6 {
  2. public static void main(String[] args) {
  3. /*
  4. 某系统的数字密码(大于0)。比如1983,采用加密方式进行传输,
  5. 规则如下:
  6. 每位数加上5
  7. 再对10求余,
  8. 最后将所有数字反转,
  9. 得到一串新数。
  10. */
  11. //分析:
  12. //1.把整数里面的每一位放到数组当中
  13. int[] arr = {1, 9, 8, 3};
  14. //2.加密
  15. //每位数加上5
  16. for (int i = 0; i < arr.length; i++) {
  17. arr[i] = arr[i] + 5;
  18. }
  19. //再对10求余,
  20. for (int i = 0; i < arr.length; i++) {
  21. arr[i] = arr[i] % 10;
  22. }
  23. //将所有数字反转
  24. for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
  25. int temp = arr[i];
  26. arr[i] = arr[j];
  27. arr[j] = temp;
  28. }
  29. //8 3 4 6 --> 8346
  30. //3.把数组里面的每一个数字进行拼接,变成加密之后的结果
  31. int number = 0;
  32. for (int i = 0; i < arr.length; i++) {
  33. number = number * 10 + arr[i];
  34. }
  35. System.out.println(number);
  36. }
  37. }

拓展:


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

 

练习二:数字解密

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

代码示例:


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

练习三:抽奖

需求:

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


  
  1. 888元的奖金被抽出
  2. 588元的奖金被抽出
  3. 10000元的奖金被抽出
  4. 1000元的奖金被抽出
  5. 2元的奖金被抽出

解法一:

 


  
  1. public class Test9 {
  2. public static void main(String[] args) {
  3. /* 需求:
  4. 一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。
  5. 请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
  6. 打印效果如下:(随机顺序,不一定是下面的顺序)
  7. 888元的奖金被抽出
  8. 588元的奖金被抽出
  9. 10000元的奖金被抽出
  10. 1000元的奖金被抽出
  11. 2元的奖金被抽出
  12. */
  13. //分析:
  14. //1.定义数组表示奖池
  15. int[] arr = {2, 588, 888, 1000, 10000};
  16. //2.定义新数组用于存储抽奖的结果
  17. int[] newArr = new int[arr.length];
  18. //3.抽奖
  19. Random r = new Random();
  20. //因为有5个奖项,所以这里要循环5次
  21. for (int i = 0; i < 5; ) {
  22. //获取随机索引
  23. int randomIndex = r.nextInt(arr.length);
  24. //获取奖项
  25. int prize = arr[randomIndex];
  26. //判断当前的奖项是否存在,如果存在则重新抽取,如果不存在,就表示是有效奖项
  27. boolean flag = contains(newArr, prize);
  28. if(!flag){
  29. //把当前抽取到的奖项添加到newArr当中
  30. newArr[i] = prize;
  31. //添加完毕之后,移动索引
  32. i++;
  33. }
  34. }
  35. //4.遍历newArr
  36. for (int i = 0; i < newArr.length; i++) {
  37. System.out.println(newArr[i]);
  38. }
  39. }
  40. //判断prize在数组当中是否存在
  41. //存在:true
  42. //不存在:false
  43. public static boolean contains(int[] arr,int prize){
  44. for (int i = 0; i < arr.length; i++) {
  45. if(arr[i] == prize){
  46. return true;
  47. }
  48. }
  49. return false;
  50. }
  51. }

解法二:

 


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

练习四:双色球

 


  
  1. public class Test11 {
  2. public static void main(String[] args) {
  3. //1.生成中奖号码
  4. int[] arr = createNumber(); // 123456 7
  5. System.out.println("=======================");
  6. for (int i = 0; i < arr.length; i++) {
  7. System.out.print(arr[i] + " ");
  8. }
  9. System.out.println("=======================");
  10. //2.用户输入彩票号码(红球 + 蓝球)//654321
  11. int[] userInputArr = userInputNumber();
  12. //3.判断用户的中奖情况
  13. //红球 蓝球
  14. int redCount = 0;
  15. int blueCount = 0;
  16. //判断红球
  17. for (int i = 0; i < userInputArr.length - 1; i++) {
  18. int redNumber = userInputArr[i];
  19. for (int j = 0; j < arr.length - 1; j++) {
  20. if(redNumber == arr[j]){
  21. redCount++;
  22. //如果找到了,那么后面的数字就没有必要继续比较了
  23. //跳出内循环,继续判断下一个红球号码是否中奖
  24. break;
  25. }
  26. }
  27. }
  28. //判断蓝球
  29. int blueNumber = userInputArr[userInputArr.length-1];
  30. if(blueNumber == arr[arr.length - 1]){
  31. blueCount++;
  32. }
  33. //根据红球的个数以及蓝球的个数来判断中奖情况
  34. if(redCount == 6 && blueCount == 1){
  35. System.out.println("恭喜你,中奖1000万");
  36. }else if(redCount == 6 && blueCount == 0){
  37. System.out.println("恭喜你,中奖500万");
  38. }else if(redCount == 5 && blueCount == 1){
  39. System.out.println("恭喜你,中奖3000");
  40. }else if((redCount == 5 && blueCount == 0) || (redCount == 4 && blueCount == 1)){
  41. System.out.println("恭喜你,中奖200");
  42. }else if((redCount == 4 && blueCount == 0) || (redCount == 3 && blueCount == 1)){
  43. System.out.println("恭喜你,中奖10");
  44. }else if((redCount == 2 && blueCount == 1) || (redCount == 1 && blueCount == 1)|| (redCount == 0 && blueCount == 1)){
  45. System.out.println("恭喜你,中奖5");
  46. }else{
  47. System.out.println("谢谢参与,谢谢惠顾");
  48. }
  49. }
  50. public static int[] userInputNumber() {
  51. //1.创建数组用于添加用户购买的彩票号码
  52. //6个红球 1个蓝球 数组长度:7
  53. int[] arr = new int[7];
  54. //2.利用键盘录入让用输入
  55. Scanner sc = new Scanner(System.in);
  56. //让用户输入红球号码
  57. for (int i = 0; i < 6; ) {
  58. System.out.println("请输入第" + (i + 1) + "个红球号码");
  59. int redNumber = sc.nextInt();
  60. //redNumber 在1~33 唯一不重复
  61. if (redNumber >= 1 && redNumber <= 33) {
  62. boolean flag = contains(arr, redNumber);
  63. if (!flag) {
  64. //不存在
  65. //有效的,可以添加到数组当中
  66. arr[i] = redNumber;
  67. i++;
  68. } else {
  69. //存在
  70. System.out.println("当前红球号码已经存在,请重新输入");
  71. }
  72. } else {
  73. System.out.println("当前红球号码超出范围");
  74. }
  75. }
  76. //让用户输入篮球号码
  77. System.out.println("请输入篮球号码");
  78. //1~16
  79. while (true) {
  80. int blueNumber = sc.nextInt();
  81. if (blueNumber >= 1 && blueNumber <= 16) {
  82. arr[arr.length - 1] = blueNumber;
  83. break;
  84. } else {
  85. System.out.println("当前篮球号码超出范围");
  86. }
  87. }
  88. return arr;
  89. }
  90. public static int[] createNumber() {
  91. //1.创建数组用于添加中奖号码
  92. //6个红球 1个蓝球 数组长度:7
  93. int[] arr = new int[7];
  94. //2.随机生成号码并添加到数组当中
  95. //红球:不能重复的 1 2 3 4 5 6
  96. //蓝球:可以跟红球号码重复 5
  97. //生成红球号码并添加到数组当中
  98. Random r = new Random();
  99. for (int i = 0; i < 6; ) {
  100. //获取红球号码
  101. int redNumber = r.nextInt(33) + 1;
  102. boolean flag = contains(arr, redNumber);
  103. if (!flag) {
  104. //把红球号码添加到数组当中
  105. arr[i] = redNumber;
  106. i++;
  107. }
  108. }
  109. //生成蓝球号码并添加到数组当中
  110. int blueNumber = r.nextInt(16) + 1;
  111. arr[arr.length - 1] = blueNumber;
  112. return arr;
  113. }
  114. //用于判断数组在数组中是否存在
  115. public static boolean contains(int[] arr, int number) {
  116. for (int i = 0; i < arr.length; i++) {
  117. if (arr[i] == number) {
  118. return true;
  119. }
  120. }
  121. return false;
  122. }
  123. }

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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