先不管猿圈网是干什么的,反正我觉得那是一个可以做题,可以敲代码的网站 😆 ,昨天意外发现了这个网站,在上面做了几道 Java 的题,总感觉哪里做的不太对劲,分享出来相互交流一下,帮忙看看我做的到底哪块是不对的。
代码中从注释
//No.1
开始到注释//end_code
结束是需要自己写代码实现功能的地方,除此部分之外的代码基本都是试题给定的代码。
用 java 代码实现插入排序
1import java.util.Arrays; // 自己导入 2 3public class InsertSortTest { 4 5 public static void main(String[] args) { 6 int[] array = { 49, 38, 65, 97, 76, 13, 27, 14, 10 }; 7 //No.1 8 //开始写代码,用java实现插入排序 9 if (array == null || array.length == 0) { //判断数组不存在或为空 10 return; 11 } 12 13 int i, j, tmp; 14 int len = array.length; 15 for (i = 1; i < len; i++) { // 从 1 开始遍历 array 16 j = i; 17 tmp = array[i]; 18 while (j > 0 && tmp < array[j - 1]) { // 如果 array[i] < array[i - 1] 19 array[j] = array[j - 1]; // array[i] = array[i - 1] 20 j--; 21 } 22 array[j] = tmp; // array[i - 1] = array[i] 23 } 24 System.out.println(Arrays.toString(array)); 25 //end_code 26 } 27}
1
2### 2. ip 转化为整数
3> #### `使用 java 代码实现将 IPV4 的 IP 地址转化为对应整数并输出,比如 192.168.199.1 对应整数为 3232286465`
4>
5> ``` java
6> public class IpToNumber {
7> public static void main(String[] args) {
8> IpToNumber ipToNumber = new IpToNumber();
9> System.out.println("IPV4的IP地址对应的整数为 : " + ipToNumber.ipToLong("192.168.199.1"));
10> }
11>
12> public long ipToLong(String ipAddress) {
13> long result = 0;
14> String[] ipAddressInArray;
15>
16> //No.1
17> //开始写代码,将IPV4的IP地址转化为相对应的整数
18> ipAddressInArray = ipAddress.split("\\."); // 将 ip 截为 4 个部分字符串
19> long[] ipLong = new long[4];
20> for (int i = 0; i < ipAddressInArray.length; i++) {
21> ipLong[i] = Long.parseLong(ipAddressInArray[i]); // 分别转为 long 型后存入 ipLong 中
22> }
23> result = (ipLong[0] << 24) + (ipLong[1] << 16) + (ipLong[2] << 8) + ipLong[3]; // 进行位移操作
24> //end_code
25> return result;
26> }
27> }
28> ```
29
30### 3. 找重复数字和未出现数字
31> #### `假设 0-10000 数字中有 2 个数字相同,还有 1 个数字没有出现,仅遍历一次数组找出重复数和未出现的数字。`
32>
33> ``` java
34> public class FindNumberTest {
35> public static void main(String[] args) {
36> int number[] = new int[10001];
37> int numCopy[] = new int[10001]; // 这个变量我没有用到...不知道是用来干嘛的
38> int repeat = 0, notAppear = 0;
39> int sumNumber = 0;
40> int i;
41>
42> for (i = 0; i < 10001; i++) {//数组初始化
43> number[i] = i;
44> }
45> number[573] = 5236;//设定重复数字5236出现两次,573不出现
46>
47> //No.1
48> //开始写代码,仅遍历一次数组找出重复数和未出现的数字。
49> for (int j = 0; j < number.length; j++) {
50> if(j != number[j] && number[j] == number[sumNumber]) { // 因为数组 number[0] = 0, number[1] = 1... 所以这算不算是投机取巧 😂
51> repeat = number[j];
52> notAppear = j;
53> }
54> sumNumber++;
55> }
56> //end_code
57> System.out.println("重复数字:"+repeat + " 未出现数字:" + notAppear);
58> }
59> }
60> ```
61
62### 4. 约瑟夫环问题
63> #### `用 java 代码实现约瑟夫环问题,50 个人围成一圈报数,报到 3 的倍数的离开,求最后剩下的那个人原来站的位置`
64> ``` java
65> // 在主方法中调用
66> public static void YueSeFuLoop() {
67> LinkedList linkedlist = new LinkedList();
68> //No.1
69> //开始写代码,有50人围成一圈报数,报到3的倍数的人离开,求最后剩下的人原来站在第几位,实现removeFromList方法
70> for (int i = 1; i <= 50; i++) {
71> linkedlist.add(i);
72> }
73> int index = 0;
74> while(linkedlist.size() > 0) { // 最后一个人离开之前
75> for (int i = 0; i < (3 - 1); i++) { // 如果不是 3 的倍数
76> int num = linkedlist.remove(0); // 移除不是 3 的倍数的数,第一次开始为 1
77> linkedlist.add(num); // 将不是 3 的倍数的数放在最后,第一次开始是把 1 放在 50 之后
78> }
79> // 未进入 for 循环,说明是 3 的倍数,则从列表中移除
80> index = linkedlist.remove(0);
81> System.out.println("end : " + linkedlist.size() + " \t index: " + index);
82> }
83> // while 循环执行完毕,最后一个人已被移除
84> System.out.println(index); // 最后一个人开始所站的位置 11
85> }
86> ```
87
88### 5. 阿姆斯特朗数问题
89> #### `例如 153=1^3+5^3+3^3 的数叫做 Armstrong 数,用 java 代码实现输出三位数的 Armstrong 数`
90> ``` java
91// 同样还是在主方法里调用 😁
92> public static void armstrongTest() {
93> int hundredsDigit,tensDigit,unitsDigit;//hundredsDigit表示数字的百位,tensDigit表示数字的十位,unitsDigit表示数字的个位
94> System.out.println("寻找Armstrong数:");
95> for (int i = 100; i <= 999; i++) {
96> //No.1
97> //开始写代码,例如153可以满足1^3 + 5^3 + 3^3 = 153,这样的数称为Armstrong数,输出所有三位数中的Armstrong数
98> hundredsDigit = i / 100; // 获取百位数
99> tensDigit = (i % 100) / 10; // 十位数
100> unitsDigit = i % 10; // 个位数
101> // Math.pow(double a, double b) 返回 a 的 b 次方
102> if ((Math.pow(hundredsDigit, 3) + Math.pow(tensDigit, 3) + Math.pow(unitsDigit, 3)) == i) // 如果是Armstrong数则输出
103> System.out.print(i + " ");
104> //end_code
105> }
106> System.out.println();
107> }
108> ```
109
110### 6. 统计指定类型字符个数
111> #### `用 java 代码实现输入一串字符串,统计其中的数字、英文、空格、其他字符个数`
112> ``` java
113public static void strLength() {
114 int digital = 0;//数字个数
115 int character = 0;//英文个数
116 int other = 0;//其他字符个数
117 int blank = 0;//空格个数
118 char[] chars = null;
119 System.out.println("这是任意一串字符:");
120 String string = "djfiepqo ioghr4 8758495 7123hr37hfjW$@@$@^%!";
121 chars = string.toCharArray();
122 //No.1
123 //开始写代码,计算任意一串字符中的数字个数、英文字母个数、空格个数和其他字符个数
124 for (int i = 0; i < chars.length; i++) {
125 if(chars[i] >= '0' && chars[i] <= '9') { // 数字
126 digital++;
127 } else if((chars[i] >= 'a' && chars[i] <='z') || (chars[i] >= 'A' && chars[i] <='Z')) { // 英文字母
128 character++;
129 } else if(chars[i] == ' ') { // 空格
130 blank++;
131 } else { // 其他字符
132 other++;
133 }
134 }
135 //end_code
136 System.out.println("数字个数: " + digital);
137 System.out.println("英文字母个数: " + character);
138 System.out.println("空格个数: " + blank);
139 System.out.println("其他字符个数:" + other);
140}
141> ```
142
143### 7. 用递归方法计算一个数的阶乘
144> #### `给定一个正整数,Java 实现用递归的方法计算它的阶乘`
145> ``` java
146> public class Test {
147> public static void main(String[] args) {
148> int number = 12;
149> Recursion factorialRecursion = new Recursion();
150> System.out.println(number + "! = " + factorialRecursion.recursion(number));
151> }
152> }
153> //No.1
154> //开始写代码,给定一个正整数,用递归的方法计算它的阶乘.main函数已给出,实现Recursion类
155> class Recursion {
156> public int recursion(int number) {
157> if(number < 0) {
158> System.out.println("请输入0或正整数!");
159> return 0;
160> } else if(number == 1 || number == 0) {
161> return 1;
162> } else {
163> return number * recursion(number - 1);
164> }
165> }
166> }
167> //end_code
168> ```
169>
170> 艾玛呀,一不小心又到凌晨了....
内容声明 | |
---|---|
标题: 猿圈网的几个Java挑战题评测题分享 | |
链接: https://zixizixi.cn/articles/2017/03/23/1490280007138.html | 来源: iTanken |
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可,转载请保留此声明。
|