天天看點

藍橋杯(java)個人賽真題:循環節長度

循環節長度

兩個整數做除法,有時會産生循環小數,其循環部分稱為:循環節。
			比如,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)  _________________________________ ;  //填空
					}
				}
			
			注意,隻能填寫缺少的部分,不要重複抄寫已有代碼。不要填寫任何多餘的文字。
           

思路:

其實像這種題,我一般剛開始會有僥幸偷懶心理,但确實,有挺多填空題是容易蒙對的,但也不能說是蒙,還是需要了解關鍵部分的代碼加經驗判斷;分享一下我蒙這題的經驗,首先題意很明确,先讀懂題目,代碼不多,這樣就好蒙了,就一個方法,先在主函數中調用,測試用,輸入測試值,然後看關鍵代碼,答案必然是通過傳回值得到,用逆推的思路确定要我們填寫的地方必然是一個傳回值并且是真确答案的傳回值,因為上面隻有一個傳回固定值的傳回值,顯然不可能隻有這一個,在蒙一下根據經驗 v.indexOf(n)>=0 這行代碼必然包含答案,先試一下size(),測試成功,在自己寫别的測試資料,測試成功。結束!

package Lqb;

import java.util.Vector;

public class Text20 {
	
	public static void main(String[] args) {
		System.out.print(f(10,3));
	}
	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();  //填空
		}
	}
}