藍橋杯 歷屆試題之數字遊戲
阿新 • • 發佈:2019-01-06
問題描述
棟棟正在和同學們玩一個數字遊戲。
遊戲的規則是這樣的:棟棟和同學們一共n個人圍坐在一圈。棟棟首先說出數字1。接下來,坐在棟棟左手邊的同學要說下一個數字2。再下面的一個同學要從上一個同學說的數字往下數兩個數說出來,也就是說4。下一個同學要往下數三個數,說7。依次類推。
為了使數字不至於太大,棟棟和同學們約定,當在心中數到 k-1 時,下一個數字從0開始數。例如,當k=13時,棟棟和同學們報出的前幾個數依次為:
1, 2, 4, 7, 11, 3, 9, 3, 11, 7。
我的程式碼在練習系統中得分66; 最後的兩個測試項顯示的是執行超時。
遊戲的規則是這樣的:棟棟和同學們一共n個人圍坐在一圈。棟棟首先說出數字1。接下來,坐在棟棟左手邊的同學要說下一個數字2。再下面的一個同學要從上一個同學說的數字往下數兩個數說出來,也就是說4。下一個同學要往下數三個數,說7。依次類推。
為了使數字不至於太大,棟棟和同學們約定,當在心中數到 k-1 時,下一個數字從0開始數。例如,當k=13時,棟棟和同學們報出的前幾個數依次為:
1, 2, 4, 7, 11, 3, 9, 3, 11, 7。
遊戲進行了一會兒,棟棟想知道,到目前為止,他所有說出的數字的總和是多少。
輸入格式 輸入的第一行包含三個整數 n,k,T,其中 n 和 k 的意義如上面所述,T 表示到目前為止棟棟一共說出的數字個數。 輸出格式 輸出一行,包含一個整數,表示棟棟說出所有數的和。 樣例輸入 3 13 3 樣例輸出 17 樣例說明 棟棟說出的數依次為1, 7, 9,和為17。 資料規模和約定 1 < n,k,T < 1,000,000;import java.util.Scanner; public class NumGame { static int sum;// 棟棟說出的數的總和 public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt();// 玩遊戲的人數 int k = in.nextInt();// 限定的數字 int T = in.nextInt();// 到目前為止棟棟一共說出的數字個數 int[] aa = new int[k];// 此陣列放置的數為對下一個num的累加值 for (int i = 0; i < k; i++) { aa[i] = i;// 填充陣列 } int j=0; int num=1; //當迴圈執行(T-1)*n+1次時 剛好可以取到T個棟棟說出的數字 for (int i = 1; i <= (T-1)*n+1; i++) { num+=aa[j++]; if(j==k){ j=0;//重置j 便於對num的計算 } //如果求得的num值大於k 就取餘操作 if(num>=k){ num=num%k; } if( i==1 || (i-1)%n==0){ sum+=num; } } System.out.println(sum); in.close(); } }
我的程式碼在練習系統中得分66; 最後的兩個測試項顯示的是執行超時。