题目1:回文数字猜想
给出一个数字N,如68,定义它的逆数为86,那么经过68+86=154,154+451=605,605+506=1111这样几次操作后,可以得到回文数字1111。现在需要判断经过7次操作是否可以得到回文,如果能,输出回文,如果不能输出0。思路:拆分各个位数并逆序相加,对和数判断回文。
(数字与逆序相加,如果对应位置相加不产生进位,那么结果肯定是回文;产生进位的有可能是回文,如605+506)
package tongji.edu.main;
import java.util.Scanner;
public class MainHuiwen {
public static void main(String[] args) {
@SuppressWarnings("resource")
int n = new Scanner(System.in).nextInt(); //获取输入数字
int hui = huiWen(n);
System.out.println(hui);
}
/* 七次操作后判断是否是回文 */
private static int huiWen(int n) {
for (int i = 0; i < 7; i++)
n = n + reverseNum(n);
if (n == reverseNum(n))
return n;
else
return 0;
}
/* 对数字进行反转 */
private static int reverseNum(int n) {
return Integer.valueOf(new StringBuffer(String.valueOf(n)).reverse().toString()).intValue();
}
}题目2:找出大串中指定子串个数并删除
找出大串中指定子串个数,并删除,返回最终的字符串和所包含子串的数量
package study.edu.main;
public class MainDeleteSubString{
public static void main(String[] args) {
String str = "123abc12de234fg1hi34j123k";
String subStr = "1";
String[] strArray = str.split(subStr);
String StrDelsub="";
int count=0;
for(String temp:strArray){
StrDelsub+=temp;
if(!temp.equals("")) //split分割字符串,如果分隔符在首部,分割后的字符串会出现一个空字符串
count++;
}
System.out.println("The number of sub str is :" + count);
System.out.println("The result string is: " + StrDelsub);
}
}
找出字符串中指定子串个数的另一种方法:
package study.edu.main;
public class MainSubString {
public static void main(String[] args) {
String str = "123abc12de234fg1hi34j123k";
String subStr = "12";
int n = deleteSub(str, subStr);
System.out.println("The number of sub str is :" + n);
}
/* 利用String的indexOf()函数来判断长串中指定字串个数 */
private static int deleteSub(String str, String subStr) {
int count = 0;
String lstr = str.toString();
int i = lstr.indexOf(subStr);
int now = 0;
while (i != -1 && i < str.length()) {
now = lstr.indexOf(subStr, i);
if (now != -1) {
count++;
i = now + subStr.length();
} else {
i = now;
}
}
return count;
}
}题目3:约瑟夫环问题
有n 个人围城一圈每次从1数起数到3就把那个人提出圈子,最后只保留一个人。
输入: 输入人数字符串
输出:把最后一个人所保留位置返回出来。
比如你输入11 的话即有11个人 [1,2,3,4,5,6,7,8,9,10,11] 。返回的是7.
如果输入"1a" 的话,返回的是"0"
package study.edu.main;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class MainLink {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
int n = 0;
try {
n = scanner.nextInt();
if(n<1)
throw new Exception("wrong input");
List<Integer> peopleLink = new LinkedList<Integer>();
for (int i = 1; i <= n; i++) {
peopleLink.add(i);
}
int count = 0;
while (peopleLink.size() > 1) {
for (int i = 0; i < peopleLink.size(); i++) {
count++;
if (count == 3) {
peopleLink.remove(i); // 出圈
count = 0;
i--; // 索引回退1步
}
}
}
System.out.println(peopleLink.get(0));
} catch (Exception e) {
System.out.println(0);
return;
}
}
}
本文解析了三个经典编程问题:通过加法逆序求回文数、查找并删除字符串中的特定子串、解决约瑟夫环问题。介绍了实现这些任务的具体算法和代码实现。

被折叠的 条评论
为什么被折叠?



