用C语言编写一个程序,求掷硬币1000次,至少有一次连续出现10次正面的概率。或者讲讲算法。

用C语言编写一个程序,求掷硬币1000次,至少有一次连续出现10次正面的概率。或者讲讲算法。,第1张

有两种办法:

第一种就是用随机数进行模拟,然后进行至少100轮的模拟,取平均数

第二种就是用公式,根据概率学进行公式推导,然后使用C语言进行计算。

第一种并不能很准确,但是有说服力,模拟轮数越多越趋向于准确

第二种准确并有说服力,但是需要理论支持去计算。

公式的话:

全部可能出现的排列,是2的1000次方

特定位置可能出现满足的排列,比如前10个都是正面,剩下的随便排列,就是2的990次方

特定位置数,一共是991个

所以,几率就是:991 2^990 / 2^1000

(好久没有算过了,可能不太对,但是思路差不多,你好好想想吧)

因为,前11个都是正面的,同时满足第一个和第二个位置的,是重复,需要排除一个,所以还需要额外考虑排除,需要进行处理一下……实际比上述的几率小,具体公式仍需推导……非专业人员帮不到你

Python 代码实现:

from random import choice

from collections import Counter

print(Counter([choice(['正面', '反面']) for k in range(1, 1000001)]))

解释:

for k in range(1, 1000001) 循环 100 万次

choice(['正面', '反面'])

用于在序列中随机选择一个元素,模拟出抛硬币的随机性

Counter 用于统计前面循环 100 万次抛出的硬币的列表数据

附运行效果图:

你没说用什么编程。。。。下面是我用c语言编的 输入1代表正面,输入0代表背面#include<stdioh>int main(){int i,j,k,a,n;</p><p>scanf("%d",&n); 输入 进行的试验次数</p><p>for(i=0;i<n;i++)</p><p>{scanf("%d",&a);</p><p> if(a==0) k++; 反面</p><p>else j++; 正面</p><p>}printf("正面是%d,反面是%d",j/(j+k),k/(j+k));}可以根据具体情况对此程序进行修改

抛掷三枚硬币列表法步骤为:

1、首先根据题意画出树状图,然后由树状图求得所有等可能的结果;

2、由树状图即可得第1、2两枚“出现正面”的有6种情况,然后直接利用概率公式求解即可求得答案。

#include<stdioh>

int main(void)

{

int n;//读入一个数,为结束的次数

int i;

int a[10];//10个硬币

int biaoji = 0;//当这个标记能被3或7整除,说明恰好数了3次或7次

scanf("%d", &n);

for (i = 0; i < 10; i++) //将硬币都初始化为正面的状态,即1

a[i] = 1;

biaoji = 1;//因为a[]的下标不允许超过9,故要重置

a[biaoji - 1] = !a[biaoji - 1];//改变硬币的状态

for (i = 0; i < 10; i++)

printf("%d", a[i]);

return 0;

}

主要特点

C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接 *** 作,因此既能够用于开发系统程序,也可用于开发应用软件。

import random

count = 0 # 1 正面 0 反面 记录1的次数

for i in range(10000000):

n = randomrandint(0,1)

if n == 1:

count += 1

print(u'正面{0}次,反面{1}次'format(count,1000000-count))

#include <stdioh>

#include <stdlibh>

#include <timeh>

int main(void)

{

int count_z = 0,count_s = 0,count_x = 0;

int flag;

srand((unsigned int)time(NULL));//以时间作为种子。

while(count_s < 3 && count_x < 3)

{

flag = rand()%2;//产生0和1两个随机数,作为正反面。

if(flag)

{

count_x++;

count_s = 0;

printf("国徽向下 !\n");

}

else

{

count_s++;

count_x = 0;

printf("国徽向上 !\n");

}

count_z++;

}

printf("========================================================\n");

printf("总共抛了 %d 次!\n", count_z);

system("pause");

return 0;

}

以上就是关于用C语言编写一个程序,求掷硬币1000次,至少有一次连续出现10次正面的概率。或者讲讲算法。全部的内容,包括:用C语言编写一个程序,求掷硬币1000次,至少有一次连续出现10次正面的概率。或者讲讲算法。、python 3.7写一个程序:抛硬币一百万次现实正面与反面的次数 要用到循环语句 求大神指点、求编写一个程序模拟投硬币,统计正反面出现的机率等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9822911.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存