一道面試題

2021-04-14 15:15:08 字數 1029 閱讀 9500

一道面試題

射擊運動員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 數量 數量 數量 數量 數量 數量 數量 數...