藍橋杯——Java集合練習題


回文數、維密、約瑟夫環

回文數

問題描述:
123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。輸入一個正整數n, 編程求所有這樣的五位和六位十進制數,滿足各位數字之和等於n。

輸入格式:
輸入一行,包含一個正整數n。
輸出格式:
按從小到大的順序輸出滿足條件的整數,每個整數占一行。

樣例輸入:
52
樣例輸出:
899998
989989
998899

數據規模和約定
1<=n<=54。

分析:
利用回文數性質:(五位)abcba或(六位)abccba
直接輸出,不排序
數組保存,不知道多少個(下下策)
集合保存,集合排序(要求高,代碼亂)
集合保存,轉為數組,排序輸出(要求較高,推薦)

package bb;
import java.util.*;
public class 回文數 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n;
		// 回文數性質:(五位)abcba
		// 或(六位)abccba
		int a, b, c;
		n = sc.nextInt();
		List<Integer> lst = new ArrayList<Integer>();
		for (a = 1; a <= 9; a++) {
			for (b = 0; b <= 9; b++) {
				for (c = 0; c <= 9; c++) {
					if (a + b + c + b + a == n) {
						Integer it = Integer.valueOf("" + a + b + c + b + a);
						lst.add(it);
					}
					if (2 * (a + b + c) == n) {
						Integer it = Integer.valueOf("" + a + b + c + c + b + a);
						lst.add(it);
					}
				}
			}
		}
		Integer[] arr = new Integer[lst.size()];
		lst.toArray(arr);
		Arrays.sort(arr);
		for (Integer integer : arr) {
			System.out.println(integer);
		}
		sc.close();
	}
}

維密

美國數學家維納(N.Wiener)智力早熟,11歲就上了大學。
他曾在1935~1936年應邀來中國清華大學講學。
一次,他參加某個重要會議,年輕的臉孔引人注目。
於是有人詢問他的年齡,他回答說:
“我年齡的立方是個4位數。我年齡的4次方是個6位數。這10個數字正好包含了從0到9這10個數字,每個都恰好出現1次。”
請你推算一下,他當時到底有多年輕。

package bb;
import java.util.HashSet;
public class 維密 {
	public static void f1() {
		for (int i = 1; i < 100; i++) {
			// 年齡的4次方是個6位數
			int i3 = (int) Math.pow(i, 3);
			int i4 = (int) Math.pow(i, 4);
			if (("" + i3).length() == 4 && ("" + i4).length() == 6) {
				// 這10個數字正好包含了從0到9這10個數字,每個都恰好出現1次。
				String i10 = "" + i3 + i4;
				char[] charArray = i10.toCharArray();
				HashSet<Character> hashSet = new HashSet<Character>();
				for (char c : charArray) {
					hashSet.add(c);
				}
				if (hashSet.size() == 10) {
					System.out.println(i);
				}
			} else {
				continue;
			}
		}
	}
	public static void main(String[] args) {
		f1();
	}
}

約瑟夫環

1)10人圍一圈

2)從1開始報數,凡是報到3的人被淘汰,然后再從下一個人繼續數下去,直到最后只剩下一個人為止

3)輸出最后一個人的編號

題目

package bb;
import java.util.Vector;
public class 約瑟夫環 {
	public static void main(String[] args) {
		Vector<Integer> a = new Vector<Integer>();
		for (int i = 0; i < 10; i++) {
			a.add(i + 1);
		}
		for (;;) {
			if (a.size() == 1) {
				break;
			}
			for (int i = 0; i < 2; i++) {
				a.add(________________);// ←填空
			}
			a.remove(0);
		}
		System.out.println(a);
	}
}

解析:

package bb;
// 以列表模擬循環隊列:首接尾
// 1,2,3,4,5,6,7,8,9,10
// 第一輪:1,2[刪3]4,5,6,7,8,9,10,1,2...(循環:10數完了就該數1,2)
// 第二輪:1,2[刪3]4,5[刪6]7,8,9,10,1,2,4,5...(循環:10數完了就該數1,2,4,5)
// 跳兩個,刪第3個(跳的兩個,接到列表最后:其實是模擬循環--首接尾)
import java.util.Vector;
public class 約瑟夫環 {
	public static void main(String[] args) {
		Vector<Integer> a = new Vector<Integer>();
		for (int i = 0; i < 10; i++) {
			a.add(i + 1);
		}
		for (;;) {
			if (a.size() == 1) {
				break;
			}
			for (int i = 0; i < 2; i++) {
				a.add(a.remove(0));// ←填空(一句分為兩句更好理解)
			}
			a.remove(0);
		}
		System.out.println(a);
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM