题目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;
- }
- }
- }