
有两种办法:
第一种就是用随机数进行模拟,然后进行至少100轮的模拟,取平均数
第二种就是用公式,根据概率学进行公式推导,然后使用C语言进行计算。
第一种并不能很准确,但是有说服力,模拟轮数越多越趋向于准确
第二种准确并有说服力,但是需要理论支持去计算。
公式的话:
全部可能出现的排列,是2的1000次方
特定位置可能出现满足的排列,比如前10个都是正面,剩下的随便排列,就是2的990次方
特定位置数,一共是991个
所以,几率就是:991 2^990 / 2^1000
(好久没有算过了,可能不太对,但是思路差不多,你好好想想吧)
因为,前11个都是正面的,同时满足第一个和第二个位置的,是重复,需要排除一个,所以还需要额外考虑排除,需要进行处理一下……实际比上述的几率小,具体公式仍需推导……非专业人员帮不到你
Python 代码实现:
from random import choicefrom 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写一个程序:抛硬币一百万次现实正面与反面的次数 要用到循环语句 求大神指点、求编写一个程序模拟投硬币,统计正反面出现的机率等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)