【每日藍橋】27、一五年省賽Java組真題「迴圈節長度」

2021-03-10 12:00:01

你好呀,我是灰小猿,一個超會寫bug的程式猿!

歡迎大家關注我的專欄「每日藍橋」,該專欄的主要作用是和大家分享近幾年藍橋杯省賽及決賽等真題,解析其中存在的演演算法思想、資料結構等內容,幫助大家學習到更多的知識和技術!

標題:迴圈節長度

兩個整數做除法,有時會產生迴圈小數,其迴圈部分稱為:迴圈節,比如:

11/13=6=>0.846153846153......,其迴圈節為【846153】共有6位數,下面的方法,可以求出迴圈節的長度,

請仔細閱讀程式碼,並填寫劃線部分缺少的程式碼:
public static int f(int n,int m) {

n = n % m;

Vector v = new Vector();

for(;;) {

v.add(n);

n *= 10;

n = n % m;

if (n==0) return 0;

if(v.indexOf(n)>=0) ____________________    //填空;

}

}

注意:只能填寫缺少的部分,不要重複抄寫已有程式碼,不要填寫任何多餘的文字。

解題思路:

本題主要使用vector來對餘數進行儲存,之後將餘數與陣列中儲存的資料進行對比,判斷資料是否重複,之後判斷重複的資料長度即可。

答案原始碼:

import java.util.Vector;

public class Year2015_Bt4 {

	public static void main(String[] args) {
		System.out.println(f(11, 13));
	}
	
	public static int f(int n,int m) {
		n = n % m;
		Vector v = new Vector();
		for(;;) {
			v.add(n);
			n *= 10;
			n = n % m;
			if (n==0) return 0;
			if(v.indexOf(n)>=0) return v.size()-v.indexOf(n);
		
		}
		
	}

}

 

輸出樣例:

其中有不足或者改進的地方,還希望小夥伴留言提出,一起學習!

感興趣的小夥伴可以關注專欄!

灰小猿陪你一起進步!