• 蓝桥杯——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);
    	}
    }
    
  • 相关阅读:
    2021
    关于react,vue框架的搭建及bug处理
    centOS7使用
    git初探
    项目分享技术大会总结
    angular中的异常机制与异常之外的处理
    angluarjs中指令的使用方式
    Servlet知识总结
    有时候真的需要一点点改变
    story
  • 原文地址:https://www.cnblogs.com/tigerlion/p/11190922.html
Copyright © 2020-2023  润新知