HJ32 密码截取
首先确定回文串,就是找中心然后向两边扩散看是不是对称的就可以了。
在遍历中心点的时候,要注意中心点有两种情况。
一个元素可以作为中心点,两个元素也可以作为中心点。
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
int length1 = 0;
int length2 = 0;
int result = 0;
for (int i = 0; i < str.length(); i++) {
length1 = Math.max(length1, getRes(str, i, i, str.length()));
length2 = Math.max(length2, getRes(str, i, i+1, str.length()));
result = length1 >= length2 ? length1 : length2;
}
System.out.print(result);
}
public static int getRes(String str, int i, int j, int length) {
int res = 0;
while (i >= 0 && j < length && str.charAt(i) == str.charAt(j)) {
res = j - i + 1;
i--;
j++;
}
return res;
}
}
HJ33 整数与IP地址间的转换
牛客网大佬思路:
1.输入IP地址,输出10进制的IP地址
每次获取的一个字段值,与下个字段值相加时,乘256,如果这里不懂可以手动模拟一下
2.输入10进制IP地址,输出32位二进制的IP地址
同样也是按照256进行的,每一个字段都是当前值对256的余数
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//输入IP地址;输出转换成10进制的IP地址
String str = in.nextLine();
String[] strs = str.split("\\.");//将每一段存入数组中
long result = 0;
for (int i = 0; i < 4; i++) {
result = result * 256 + Integer.parseInt(strs[i]);;
}
System.out.println(result);
//输入10进制型的IP地址;输出转换后的IP地址
String str1 = in.nextLine();
long num = Long.parseLong(str1);
String res = "";
for (int i = 0; i < 4; i++) {
res = num % 256 +"." + res;
num /= 256;
}
System.out.println(res.substring(0, res.length() - 1));
}
}
个人思路:
1.输入IP地址,输出10进制的IP地址
先将每个字段转换为二进制,不足8位补0(使用String.format()),将二进制字符串拼接存入StringBuilder,然后将字符串转换为十进制(注意使用Long.parseLong())
2.输入10进制IP地址,输出32位二进制的IP地址
将十进制转换为32位二进制数,不足补0,从前往后8位截取,转换为十进制
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//输入IP地址;输出转换成10进制的IP地址
String str = in.nextLine();
String[] strs = str.split("\\.");//将每一段存入数组中
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
int n = Integer.parseInt(strs[i]);
// Integer.toBinaryString(n)
sb.append(String.format("%8s", Integer.toBinaryString(n)).replace(' ', '0'));
}
System.out.println(Long.parseLong(sb.toString(), 2));
//输入10进制型的IP地址;输出转换后的IP地址
String str1 = in.nextLine();
long num = Long.parseLong(str1);
String res = String.format("%32s", Long.toBinaryString(num)).replace(' ', '0');
for (int i = 0; i < 4; i++) {
String tmp = res.substring(i*8, i*8+8);
System.out.print(Integer.parseInt(tmp, 2));
if (i != 3) {
System.out.print(".");
}
}
}
}