拋硬幣實驗數據的統計
拋硬幣實驗做100次,記錄硬幣正反面朝上的情況。利用C++語言和Python語言編程對實驗數據進行統計。分別統計正面朝上總次數、反面朝上總次數、正面連續朝上最大次數、反面連續朝上最大次數等。
拋硬幣100次,記錄情況:正面朝上為1,反面朝上為0;
程序的數據源要求有2個,一個是內置數據源,把拋硬幣的100次實驗數據內置在代碼中,另一個是允許用戶在鍵盤上實時輸入實驗數據;運行時允許用戶選擇數據源;
程序展示統計結果的界面后,提供用戶選擇:是退出程序,還是繼續統計下一輪實驗。
C++代碼
#include <bits/stdc++.h>
using namespace std;
int conti (int a[100],int x)
{
int k = 0,max = 0;
for (int i=0;i<100;i++){
if (a[i]==x){
k = k + 1;
if (max < k){
max = k;
}
}
else{
k = 0;
}
}
return max;
}
int sum (int a[100],int x){
int total = 0;
for (int i=0;i<100;i++){
if (a[i]==x){
total = total + 1;
}
}
return total;
}
main()
{
srand((int)time(NULL));
string choice = "繼續統計下一輪數據" ;
string anwser;
int a[100],i=0;
while (choice == "繼續統計下一輪數據") {
cout<<"請選擇是否手動輸入(輸入Yes或者No):";
cin >>anwser;
if (anwser == "Yes"){
while(i<100){
cout<<"這次第"<<i+1<<"次試驗結果:";
cin>>a[i];
if ((a[i]==0||a[i]==1 )){
i = i + 1;
}
else{
cout<<"輸入錯誤,請重新輸入"<<endl;
}
}
}
else if (anwser == "No"){
for (int x=0;x<100;x++){
a[x] = rand()%2;
cout<<"第"<<x+1<<"次的實驗結果為:"<<a[x]<<endl;
}
}
cout<<"硬幣正面朝上的次數為:"<<sum(a,1) <<endl;
cout<<"硬幣正面朝下的次數為:"<<sum(a,0) <<endl;
cout<<"硬幣連續朝上的最多次數為:"<<conti(a,1) <<endl;
cout<<"硬幣連續朝下的最多次數為:"<<conti(a,0) <<endl;
cout<<"請選擇'退出程序'或者'繼續統計下一輪數據'" <<endl;
cin>>choice;
}
}
Python 代碼
from random import *
from collections import *
def conti (ls,x):
k = 0
kmax = 0
for i in ls:
if i == x:
k = k + 1
if kmax<k:
kmax = k
else:
k = 0
return kmax
choice = '繼續統計下一輪數據'
while (choice=='繼續統計下一輪數據'):
seed (randint(0,999))
print("是否手動輸入:")
answer = input()
ls = []
if answer == '是':
i = 0
while(i<100):
print('這是第{}次的結果'.format(i+1))
x = int(input())
if x in [0,1]:
ls.append(x)
i = i + 1
else:
print("輸入錯誤,請重新輸入")
elif answer == '否':
for i in range(100):
x = randint(0,1)
ls.append(x)
print('第{}次的實驗結果為{}'.format(i+1,x))
dic = Counter(ls)
print("硬幣正面朝上的次數為:{}".format(dic[1]))
print("硬幣正面朝下的次數為:{}".format(dic[0]))
print("硬幣連續朝上的最多次數為{}".format(conti(ls,1)))
print("硬幣連續朝下的最多次數為{}".format(conti(ls,0)))
print("請選擇‘退出程序’或者‘繼續統計下一輪數據’")
choice = input()
本文代碼,僅供測試,不得抄襲轉載