1.①有未知字符串长度如”AAA&&BB”,以”&&”为分隔符,将字符串分割成字符串数组[“AAA”,”BB”]。(不能用系统分割符)
/* * 这种做法没有判断字符串最前面和最后面是否有"&&" */
public static void main(String[] args) {
String strs = "AA&&BB&&CC";
char[] chars = strs.toCharArray();
List<String> strList = new ArrayList<String>();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '&' && chars[i + 1] == '&') {
i++;
strList.add(builder.toString());
builder = new StringBuilder();
continue;
}
builder.append(chars[i]);
}
strList.add(builder.toString());
int size = strList.size();
String[] strLs = (String[]) strList.toArray(new String[size]);
for (int i = 0; i < strLs.length; i++) {
System.out.println(strLs[i]);
}
}
②将数组[“AAA”,”BB”]合并成字符串”AAA&&BB”。
public static void main(String[] args) {
String[] strs = new String[]{"AA","BB","CC"};
StringBuilder builder = new StringBuilder();
for (int i = 0; i < strs.length; i++) {
if (i != 0) {
builder.append("&&");
}
builder.append(strs[i]);
}
System.out.println(builder);
}
2.求出不大(小)于N的质数。
3.1000个范围在[0-999]的数,求出两个相同的数。
for (int i = 0; i < 1000; i++) {
for (int j = i + 1; j < 1000; j++) {
if (i != j && b[i] == a[i]) {
System.out.println(b[i]);
return;
}
}
}
4.有1.2…N个人围成一个圈报数,当报到M的时候出列。求剩下是哪个人?
public static void main(String[] args) {
List<Integer> persons = new ArrayList<>();
int M = 5; // 报数5出列
for (int i = 0; i < 10; i++) {
persons.add(i);
}
int j = 1; // 报数到N
int i = 0; // 记录移除哪个
boolean isFirst = true;
while (true) {
if (persons.size() == 1) {
System.out.println(persons.get(0));
return;
}
if (!isFirst) {
i++;
j++;
}
isFirst = false; // 第一次赋值不要自加
if (persons.size() >= M) { // List大于M的时候用这里
System.out.println(">M i=" + i + " ,j =" + j);
if (j == M) {
persons.remove(i);
if (persons.size() != i) { // 上面移除了一条,所以会出现等于的情况
/* * 只有当不是最后一条的时候才需要减一 因为List删除一条会补回上去的,若是是最后一条的话 * 需要重置i,而不是减一 */
i--;
} else {
/* * 本来重置应该是0的。但是在程序一开始的时候就加了1, 所以是为-1; */
i = -1;
}
j -= M;
}
if (i == persons.size()) {
/* * 报到最后一个尾部的时候不够M个,要从头开始数过 当i == persons.size()的时候就是第一个了。 * 所以将i制为1 */
i = 0;
}
} else { // List小于M的时候用这里
System.out.println("--<M i=" + i + " ,j =" + j);
if (i > persons.size() - 1) {
i = 0;
}
if (j == M) { // j是从0开始数的
persons.remove(i);
j -= M;
}
}
}
}
5.计算26个英文字母的组合算法。
6.判断一个数是否是回文数(12321、1245421等)
public static void main(String[] args) {
char[] chars = new char[]{'1','2','3','2','1'};
int size = chars.length;
int tag = 0;
for(int i = 0; i < size / 2; i++) {
if (chars[i] == chars[size - i - 1]) {
tag++;
}
}
if (size % 2 == 0 && tag == size / 2) {
System.out.println("it's true");
} else if (size % 2 != 0 && tag == (size - 1) / 2) {
System.out.println("it's true");
} else {
System.out.println("it's false");
}
}
7.求出1000以内的完数。(6=1+2+3)