先不管猿圈网是干什么的,反正我觉得那是一个可以做题,可以敲代码的网站 😆 ,昨天意外发现了这个网站,在上面做了几道 Java 的题,总感觉哪里做的不太对劲,分享出来相互交流一下,帮忙看看我做的到底哪块是不对的。
相关说明:
代码中从注释
//No.1
开始到注释//end_code
结束是需要自己写代码实现功能的地方,除此部分之外的代码基本都是试题给定的代码。
1. 插入排序
用 java 代码实现插入排序
import java.util.Arrays; // 自己导入 public class InsertSortTest { public static void main(String[] args) { int[] array = { 49, 38, 65, 97, 76, 13, 27, 14, 10 }; //No.1 //开始写代码,用java实现插入排序 if (array == null || array.length == 0) { //判断数组不存在或为空 return; } int i, j, tmp; int len = array.length; for (i = 1; i < len; i++) { // 从 1 开始遍历 array j = i; tmp = array[i]; while (j > 0 && tmp < array[j - 1]) { // 如果 array[i] < array[i - 1] array[j] = array[j - 1]; // array[i] = array[i - 1] j--; } array[j] = tmp; // array[i - 1] = array[i] } System.out.println(Arrays.toString(array)); //end_code } }
### 2. ip 转化为整数
> #### `使用 java 代码实现将 IPV4 的 IP 地址转化为对应整数并输出,比如 192.168.199.1 对应整数为 3232286465`
>
> ``` java
> public class IpToNumber {
> public static void main(String[] args) {
> IpToNumber ipToNumber = new IpToNumber();
> System.out.println("IPV4的IP地址对应的整数为 : " + ipToNumber.ipToLong("192.168.199.1"));
> }
>
> public long ipToLong(String ipAddress) {
> long result = 0;
> String[] ipAddressInArray;
>
> //No.1
> //开始写代码,将IPV4的IP地址转化为相对应的整数
> ipAddressInArray = ipAddress.split("\\."); // 将 ip 截为 4 个部分字符串
> long[] ipLong = new long[4];
> for (int i = 0; i < ipAddressInArray.length; i++) {
> ipLong[i] = Long.parseLong(ipAddressInArray[i]); // 分别转为 long 型后存入 ipLong 中
> }
> result = (ipLong[0] << 24) + (ipLong[1] << 16) + (ipLong[2] << 8) + ipLong[3]; // 进行位移操作
> //end_code
> return result;
> }
> }
> ```
### 3. 找重复数字和未出现数字
> #### `假设 0-10000 数字中有 2 个数字相同,还有 1 个数字没有出现,仅遍历一次数组找出重复数和未出现的数字。`
>
> ``` java
> public class FindNumberTest {
> public static void main(String[] args) {
> int number[] = new int[10001];
> int numCopy[] = new int[10001]; // 这个变量我没有用到...不知道是用来干嘛的
> int repeat = 0, notAppear = 0;
> int sumNumber = 0;
> int i;
>
> for (i = 0; i < 10001; i++) {//数组初始化
> number[i] = i;
> }
> number[573] = 5236;//设定重复数字5236出现两次,573不出现
>
> //No.1
> //开始写代码,仅遍历一次数组找出重复数和未出现的数字。
> for (int j = 0; j < number.length; j++) {
> if(j != number[j] && number[j] == number[sumNumber]) { // 因为数组 number[0] = 0, number[1] = 1... 所以这算不算是投机取巧 :joy:
> repeat = number[j];
> notAppear = j;
> }
> sumNumber++;
> }
> //end_code
> System.out.println("重复数字:"+repeat + " 未出现数字:" + notAppear);
> }
> }
> ```
### 4. 约瑟夫环问题
> #### `用 java 代码实现约瑟夫环问题,50 个人围成一圈报数,报到 3 的倍数的离开,求最后剩下的那个人原来站的位置`
> ``` java
> // 在主方法中调用
> public static void YueSeFuLoop() {
> LinkedList linkedlist = new LinkedList();
> //No.1
> //开始写代码,有50人围成一圈报数,报到3的倍数的人离开,求最后剩下的人原来站在第几位,实现removeFromList方法
> for (int i = 1; i <= 50; i++) {
> linkedlist.add(i);
> }
> int index = 0;
> while(linkedlist.size() > 0) { // 最后一个人离开之前
> for (int i = 0; i < (3 - 1); i++) { // 如果不是 3 的倍数
> int num = linkedlist.remove(0); // 移除不是 3 的倍数的数,第一次开始为 1
> linkedlist.add(num); // 将不是 3 的倍数的数放在最后,第一次开始是把 1 放在 50 之后
> }
> // 未进入 for 循环,说明是 3 的倍数,则从列表中移除
> index = linkedlist.remove(0);
> System.out.println("end : " + linkedlist.size() + " \t index: " + index);
> }
> // while 循环执行完毕,最后一个人已被移除
> System.out.println(index); // 最后一个人开始所站的位置 11
> }
> ```
### 5. 阿姆斯特朗数问题
> #### `例如 153=1^3+5^3+3^3 的数叫做 Armstrong 数,用 java 代码实现输出三位数的 Armstrong 数`
> ``` java
// 同样还是在主方法里调用 :grin:
> public static void armstrongTest() {
> int hundredsDigit,tensDigit,unitsDigit;//hundredsDigit表示数字的百位,tensDigit表示数字的十位,unitsDigit表示数字的个位
> System.out.println("寻找Armstrong数:");
> for (int i = 100; i <= 999; i++) {
> //No.1
> //开始写代码,例如153可以满足1^3 + 5^3 + 3^3 = 153,这样的数称为Armstrong数,输出所有三位数中的Armstrong数
> hundredsDigit = i / 100; // 获取百位数
> tensDigit = (i % 100) / 10; // 十位数
> unitsDigit = i % 10; // 个位数
> // Math.pow(double a, double b) 返回 a 的 b 次方
> if ((Math.pow(hundredsDigit, 3) + Math.pow(tensDigit, 3) + Math.pow(unitsDigit, 3)) == i) // 如果是Armstrong数则输出
> System.out.print(i + " ");
> //end_code
> }
> System.out.println();
> }
> ```
### 6. 统计指定类型字符个数
> #### `用 java 代码实现输入一串字符串,统计其中的数字、英文、空格、其他字符个数`
> ``` java
public static void strLength() {
int digital = 0;//数字个数
int character = 0;//英文个数
int other = 0;//其他字符个数
int blank = 0;//空格个数
char[] chars = null;
System.out.println("这是任意一串字符:");
String string = "djfiepqo ioghr4 8758495 7123hr37hfjW$@@$@^%!";
chars = string.toCharArray();
//No.1
//开始写代码,计算任意一串字符中的数字个数、英文字母个数、空格个数和其他字符个数
for (int i = 0; i < chars.length; i++) {
if(chars[i] >= '0' && chars[i] <= '9') { // 数字
digital++;
} else if((chars[i] >= 'a' && chars[i] <='z') || (chars[i] >= 'A' && chars[i] <='Z')) { // 英文字母
character++;
} else if(chars[i] == ' ') { // 空格
blank++;
} else { // 其他字符
other++;
}
}
//end_code
System.out.println("数字个数: " + digital);
System.out.println("英文字母个数: " + character);
System.out.println("空格个数: " + blank);
System.out.println("其他字符个数:" + other);
}
> ```
### 7. 用递归方法计算一个数的阶乘
> #### `给定一个正整数,Java 实现用递归的方法计算它的阶乘`
> ``` java
> public class Test {
> public static void main(String[] args) {
> int number = 12;
> Recursion factorialRecursion = new Recursion();
> System.out.println(number + "! = " + factorialRecursion.recursion(number));
> }
> }
> //No.1
> //开始写代码,给定一个正整数,用递归的方法计算它的阶乘.main函数已给出,实现Recursion类
> class Recursion {
> public int recursion(int number) {
> if(number < 0) {
> System.out.println("请输入0或正整数!");
> return 0;
> } else if(number == 1 || number == 0) {
> return 1;
> } else {
> return number * recursion(number - 1);
> }
> }
> }
> //end_code
> ```
>
> 艾玛呀,一不小心又到凌晨了....
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于