华为校园招聘上机试题 Java实现(二)

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

	}

}



你可能感兴趣的:(java,华为)