猿创征文 | Java知识【综合练习】二
【摘要】
目录
练习一:数字加密
练习二:数字解密
练习三:抽奖
解法一:
解法二:
练习四:双色球
练习一:数字加密
需求:
某系统的数字密码(大于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)