每日一题(算法) ------- day16编程题-星际密码

题目:  星际密码__牛客网 (nowcoder.com)

题目分析:

每日一题(算法) ------- day16编程题-星际密码_第1张图片

 每日一题(算法) ------- day16编程题-星际密码_第2张图片

每日一题(算法) ------- day16编程题-星际密码_第3张图片

 每日一题(算法) ------- day16编程题-星际密码_第4张图片

 解题思路:

每日一题(算法) ------- day16编程题-星际密码_第5张图片

具体代码实现和说明 

    public static void main(String[] args){
        int[] arr = new int[10001]; // 由于  1 <= xi <= 10000,所以存放数据的数组长度要为10001、
        // 将f(1)的直与f(2)的值提前放入,方便后续放入数据
        arr[1] = 1;
        arr[2] = 2;
        //利用 for 循环来放入斐波那契数列
        for(int i = 3; i < arr.length; i++){
            arr[i] = arr[i-1] + arr[i-2];
            arr[i] %= 10000; // 保证数组中每个数据最多只有4位数
        }

        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){ // 保证多组输入
            StringBuilder sb = new StringBuilder();
            int n = scan.nextInt(); // n个数据
            for(int i = 0; i < n; i++){   // 将n个数据对照数组中的值拼接在sb中
                /**
                 * format格式化输入
                 *   "%04d" 暑促四位数字,如果不足则前面填充0。
                 *   arr[scan.nextInt()]  根据输入的xi来找出对应的数据
                 */
                sb.append(String.format("%04d", arr[scan.nextInt()]));
            }
            //打印结果
            System.out.println(sb);
        }
    }

你可能感兴趣的:(算法,java,数据结构)