聲明 可能本文章會有錯誤,希望各位讀者看到後,記得回覆留言,提醒我,以免誤人子弟。本人菜雞,還望各位大佬手下留情。文章是以我個人思路來寫的,只能在學習的時候看,在比賽中,當然還是怎麼 快速準確的解答題目為標準 。 題目 : 我們來玩一個游戲。 同時擲出3個普通骰子(6個面上的數字分別是1~6)。 如 ...
聲明
可能本文章會有錯誤,希望各位讀者看到後,記得回覆留言,提醒我,以免誤人子弟。本人菜雞,還望各位大佬手下留情。文章是以我個人思路來寫的,只能在學習的時候看,在比賽中,當然還是怎麼快速準確的解答題目為標準。
題目:
我們來玩一個游戲。
同時擲出3個普通骰子(6個面上的數字分別是1~6)。
如果其中一個骰子上的數字等於另外兩個的和,你就贏了。
下麵的程式計算出你能獲勝的精確概率(以既約分數表示)
public class Main
{
public static int gcd(int a, int b)
{
if(b==0) return a;
return gcd(b,a%b);
}
public static void main(String[] args)
{
int n = 0;
for(int i=0; i<6; i++)
for(int j=0; j<6; j++)
for(int k=0; k<6; k++){
if(________________________________) n++; //填空位置
}
int m = gcd(n,6*6*6);
System.out.println(n/m + "/" + 6*6*6/m);
}
}
仔細閱讀代碼,填寫劃線部分缺少的內容。
註意:不要填寫任何已有內容或說明性文字。
分析:
根據題目可以分析出,條件為其中一個骰子上的數字等於另外兩個的和,而整個main函數內有個嵌套迴圈,可以直接聯想到這三個for迴圈為遍歷出每個骰子上的數字,而if條件恰好在迴圈中,所以大膽猜想這裡的條件就是題目給的那個條件,那麼n就為滿足條件的次數。
既然是猜想,那我們繼續往下看驗證。又調用了gcd這個遞歸函數(遞歸不好的同學還是趕緊去補一下吧,這個還是有點重要的,起碼你要瞭解些),由於博主的遞歸思想有限...還是跳過函數繼續往下看,函數賦值給m,輸出應該是獲勝概率,卻都除以了m,那麼或許這個m就是n和666的最大公約數。
看完代碼,似乎我們的猜想是正確的,emmm...似乎是這個樣子的。
需要註意的是題目給的條件:如果其中一個骰子上的數字等於另外兩個的和,你就贏了。而for迴圈是從0開始迴圈的,所以for迴圈中的每個變數(也就是骰子上的數)需要加1,那麼我們就可以得出答案。
其實如果題目刷的夠多,看函數名就可以知道gcd為求最大公約數,所以...還是...多刷題吧。
代碼
//填空處:
i+j+2 == k+1 || j+k+2 == i+1 || i+k+2 == j+1