1. 程式人生 > >藍橋杯 歷屆試題之數字遊戲

藍橋杯 歷屆試題之數字遊戲

問題描述   棟棟正在和同學們玩一個數字遊戲。

  遊戲的規則是這樣的:棟棟和同學們一共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; 最後的兩個測試項顯示的是執行超時。