這是典型的古典概型,直接用窮舉法計算即可。

創(chuàng)新互聯(lián)建站主營米林網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,App定制開發(fā),米林h5微信平臺小程序開發(fā)搭建,米林網(wǎng)站營銷推廣歡迎米林等地區(qū)企業(yè)咨詢
計算思路是遍歷1到10共10個數(shù)的所有組合(用goNext函數(shù)),統(tǒng)計出組合總數(shù)count與7個數(shù)之和等于20的組數(shù)successNumber,這兩個數(shù)的商successNumber/count就是所求的概率。
計算結(jié)果為:
總次數(shù): 10000000, 成功次數(shù): 26544, 概率: 0.0026544
程序可以如下實現(xiàn):
#include stdio.h
int data[7];
int goNext()
{
int i;
for ( i = 0; i 7 ++data[i] 10; ++i ) data[i] = 1;
if ( i == 7 ) return 0;
return 1;
}
void main()
{
int i, m;
double p;
long count = 0, successNumber = 0;
for ( i = 0; i 7; ++i) data[i] = 1;
do
{
++count;
for ( i = 0, m = 0; i 7; ++i ) m += data[i];
if ( 20 == m ) ++ successNumber;
} while ( goNext() );
p = (double) successNumber / (double) count;
printf("總次數(shù): %d, 成功次數(shù): %d, 概率: %.7lf\n", count, successNumber, p);
}
呵呵。大家的好像都很專業(yè)。如果我沒記錯,這是一個高考數(shù)學(xué)題,你應(yīng)該是個高中生吧。
可以用深度優(yōu)先搜索(遞歸回溯),這樣比較簡單。
大致的思路是這樣
用一個數(shù)組 f[6],f[1]~f[5]代表那5袋方便面。
用遞歸或者循環(huán)的方法生成123 放到這5個位置(就是窮舉這total(=243)種可能)
然后寫一個判斷累計函數(shù)judge()
每生成一個排列就送到j(luò)udge去判斷一次
如果滿足條件則ok加1
最后給出概率百分?jǐn)?shù) float percent = ok*100.0/total
//--------------------------------
遞歸的代碼我已經(jīng)寫好了。通過適當(dāng)修改相關(guān)參數(shù)(把方便面袋數(shù)量和卡片種類設(shè)置為變量提示用戶輸入),可以計算不同方便面袋數(shù)和卡片種類數(shù)的中獎概率。如果使用循環(huán)的話針對這個題需要5重循環(huán),我想你應(yīng)該會,我就不寫了。
//--------------------------------
放代碼:
//--------------------------------
#include stdio.h
#include conio.h
//----------------------
int f[6],ok,total;
void judge()
{ int card[4]={0},i; //card[]表示是否有第i張卡片
for(i=1;i=5;i++)
card[f[i]]++;
for(i=1;i=3;i++)
if(!card[i]) return;
ok++;
}//-------------------------
void put(int nxi)//往第nxi袋方便面袋里放卡片
{ if(nxi == 6)
{ total++;
judge();
return; //回溯
}
int i;
for(i=1;i=3;i++)
{ f[nxi] = i;
put(nxi+1);//遞歸
}
}//-------------------------
main()
{
float per;
char c = '%';
put(1);
per = 100.0 * ok/total;
printf("概率為:%d/%d\n",ok,total);
printf("百分?jǐn)?shù): %.2f%c",per,c);
getch();
}//-------------------------
運行結(jié)果:
150/243
61.73%
當(dāng)然,你還可以加一個約分函數(shù)使得結(jié)果為最簡分?jǐn)?shù)。這里就不再討論了。
我想是因為for (i=1;b=1;i++)這一句無效。
前面b=0,循環(huán)條件是b=1,所以不循環(huán)的。
另外b=b+0.1*pow(0.9,i-1);這句的0.1后面應(yīng)該加上f,否則類型不對。
這個是改動過的代碼
#include stdio.h
#include math.h
int main()
{
int i;
long double b;
b=0;
for (i=1;b=1;i++)
{
b=b+0.1f*pow(0.9,i-1);
}
printf("%d\n", i);
return 0;
}
時間有些晚了,答題有點倉促,不知道能不能行,如果出現(xiàn)問題,希望海涵。
計算機里的取隨機數(shù)函數(shù)是均勻分布的隨機數(shù)。
0.0005的概率,相當(dāng)于2000個數(shù)里取一個。
所以我們可以
在0到1999范圍里取隨機數(shù),如果取到數(shù)值
1000,我們就得1(并響鈴),否則得0。
#include
stdio.h
#include
stdlib.h
#include
math.h
#include
time.h
void
main()
{
long
int
i,y;
double
x,
r,
M
=
2000.0;
srand((unsigned)time(NULL));
for
(i=0;i5000;i++)
//
取5000個
{
r
=
(
(double)rand()
/
((double)(RAND_MAX)+(double)(1))
);
x
=
(r
*
M);
y
=
(long
int)
x;
if
(y
==
1000)
{
printf("1
");printf("\007");
//
如果得1,就響鈴!
}
else
printf("0
");
};
}
隨機生成一個數(shù)倒是可以,概率的話,直接用1除以生成的數(shù)就可以了
沒有的
C語言是屬于中級語言
而且不是面向數(shù)學(xué)計算的語言
不過對于這種功能的函數(shù)是可以用C語言自己寫出來的
當(dāng)前文章:c語言有沒有概率函數(shù),用c求概率
URL分享:http://chinadenli.net/article45/dseohei.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、全網(wǎng)營銷推廣、小程序開發(fā)、網(wǎng)站收錄、網(wǎng)站內(nèi)鏈、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)