一道面試題
射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。
打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。
然後開始遞迴狂打槍,一到10就記錄(if(params + i == 10) );
在迴圈的控制中已經排除了大於10的可能性(i<= 10 - params);
如果不到10,並且還未打到10槍就繼續打下一槍(else if(paramcount > 0)countout(params + i, paramcount - 1); );
如果已經打足了10槍就結束。
其中函式中的引數params是記錄目前總共打了多少環了,paramcount記錄還能打幾槍。
#include "stdio.h"
int s = 0;
void countout(int params, int paramcount)
else if(paramcount > 0)
countout(params + i, paramcount - 1);
else
break;
} }
main()
一般的概率書上都有基本一樣的例題的:10個箱子,把它們分成10份,只需要9個間隔;如果把這間隔和箱子看成是一樣的東西,那就是10+9=19個位 置;在19個位置裡選中9個位置,用來間隔,剩下的10個位置放箱子。或者在19個位置裡選中10個位置放10個箱子,即c19,10,等於c19,9.
10發中90環,等同於10發錯失10環,等同於10發中10環,即把這10環分成10發,換個形象思維,等同於把10個箱子換成10份,即等同於在19個位置中選9個位置。
即c19,9=19!/(9!×(19-9)),再優化一下演算法。
num = 1;
for(i=1;i<=10;i++)
num = num *(9+i)/i;
printf("%d",num);
計算結果:num=92378
一道面試題
前些時候在找工作,就在準備結束此次找工作歷程的時候,去了一家公司面試,去了之後技術經理直接帶到一台電腦旁,給了一張紙條,上面是這樣的題目 用c或c 來實現 1 建立一棵樹,該樹的深度是隨機的,每個節點的位元組點數是隨機的。2 給每個節點分配一段隨機大小的記憶體空間,給每個節點賦乙個隨機數。3 遍歷這...
一道面試題
如果n為偶數,則將它除以2,如果n為奇數,則將它加1或者減1。問對於乙個給定的n,怎樣才能用最少的步驟將它變到1。例如 n 61 n 60 n 2 30 n 2 15 n 16 n 2 8 n 2 4 n 2 2 n 2 1 public class myclass public static vo...
一道面試題
有一張表兩個字段 date num,現在要產生如下的 請設計相關sql語句。年份 1月 2月 3月 4 月 5月 6月 7月 8 月 9月 10月 11月 12 月 2010 數量 數量 數量 數量 數量 數量 數量 數量 數量 數量 數量 數量2011 數量 數量 數量 數量 數量 數量 數量 數...