网易2017春招笔试真题编程题集合(5)——魔力手环
生活随笔
收集整理的這篇文章主要介紹了
网易2017春招笔试真题编程题集合(5)——魔力手环
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
小易擁有一個擁有魔力的手環上面有n個數字(構成一個環),當這個魔力手環每次使用魔力的時候就會發生一種奇特的變化:每個數字會變成自己跟后面一個數字的和(最后一個數字的后面一個數字是第一個),一旦某個位置的數字大于等于100就馬上對100取模(比如某個位置變為103,就會自動變為3).現在給出這個魔力手環的構成,請你計算出使用k次魔力之后魔力手環的狀態。?
輸入描述:
輸入數據包括兩行: 第一行為兩個整數n(2 ≤ n ≤ 50)和k(1 ≤ k ≤ 2000000000),以空格分隔 第二行為魔力手環初始的n個數,以空格分隔。范圍都在0至99.輸出描述:
輸出魔力手環使用k次之后的狀態,以空格分隔,行末無空格。輸入例子:
3 2 1 2 3輸出例子:
8 9 7參考:http://blog.csdn.net/zheng548/article/details/71075163 import java.util.Scanner;public class Main {/*** 利用矩陣快速冪*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int k = sc.nextInt();//用一個二維數組存儲int[][] arr= new int[1][n];for (int i = 0; i < n; i ++) {arr[0][i] = sc.nextInt();}//初始化單元矩陣int[][] mul = new int[n][n];for (int i = 0; i < n; i ++) {if (i < n - 1) {mul[i][i] = 1;mul[i + 1][i] = 1;} else {mul[i][i] = 1;mul[0][i] = 1;}}/*** 矩陣快速冪的核心部分* 二分搜索 與之本質 類似*/for (; k > 0; k >>= 1) {if ((k & 1) == 1) {arr = Core(arr, mul);}mul = Core(mul, mul);}/*** 輸出結果*/int i;for (i = 0; i < n - 1; i ++) {System.out.print(arr[0][i] + " ");}System.out.println(arr[0][i]);}/*** 矩陣相乘* 1. 矩陣a與b相乘, a的列數等于b的行數* 2. 結果矩陣的行等于a 的行數* 3. 結果矩陣的列等于b 的列數** @param a 矩陣a* @param b 矩陣b* @return 返回結果矩陣*/private static int[][] Core(int[][] a, int[][] b) {int rowRes = a.length;int columnRes = b[0].length;int columnA = a[0].length; // a[0].length == b.length; 矩陣相乘的條件int[][] c = new int[rowRes][columnRes];for (int i =0; i < rowRes; i ++) {for (int j = 0; j < columnRes; j ++) {for (int k = 0; k < columnA; k ++) {if (a[i][k] == 0 || b[k][j] == 0) {continue; //剪枝 }c[i][j] += a[i][k] * b[k][j];}//100取余運算if (c[i][j] >= 100) {c[i][j] %= 100;}}}return c;}}
關于矩陣快速冪:http://blog.csdn.net/alwaystry/article/details/70187764
?
轉載于:https://www.cnblogs.com/dengyt/p/6963253.html
總結
以上是生活随笔為你收集整理的网易2017春招笔试真题编程题集合(5)——魔力手环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 热更新方案 - lance的专栏
- 下一篇: 如果通过当前元素知道父元素、同级元素