前几天考数学的时候,看到了这么一道题:
幸福村决定将优质榴莲拿出来进行趣味叫卖,在吸引游客的同时获取更高的利润,叫卖的方式如下:以40元/斤为初始单价,通过电脑随机出现的数字确定新单价,电脑会随机出现数字0,1,2,…,9这十个数字中的一个。若出现的数字不超过6,则在原单价的基础之上增加20元作为新单价;若出现的数字超过6,则在原单价的基础上增加10元作为新单价,重复上述过程。若出现150元/斤 的叫价,则停止叫价,游客以150元/斤的单价购买优质榴莲;若未出现,则失去叫价资格。现有一游客参加了本次叫卖,试估计该游客成功买到优质榴莲的概率。
考试的时候看着这两百来字,再看了看表,还剩二十分钟,直接就丢掉了这道题…
考完试一看,又感觉有点搞头
诶,那就开整吧!
通读整题,可以发现整个过程就是一个循环,一直把单价往高抬,直到出现150或者错过150(顺便嘀咕一句,什么优质榴莲他喵的那么贵…)
举个栗子:
在搞清楚流程之后,就可以开始编写程序啦(为了使结果准确,打算用大量游客来进行叫卖,所以在叫卖的循环之外还要再嵌套一层游客一个个进行叫卖的while循环 )
在线试运行:https://onlinegdb.com/gfUHopzFW
m = int(input("叫卖人数:")) import random i = 1 n = 0 def p_add(price_0):"""模拟叫价的函数""" adds = random.randint(0,9) if adds <= 6: price_0 += 10 else: price_0 += 20 print(" 抽到了",adds,"价格变为",price_0) return price_0 while i <= m: # 游客层面的循环 print("nn第",i,"位客人开始叫卖,底价为40") price_0 = 40 # 下一位客人叫卖时,需要初始化单价为40 p_continue = True while p_continue: # 单个游客叫价层面的循环 price_0 = p_add(price_0) # 调用函数进行叫价 if price_0 == 150: print(" 这位客人成功买到了优质榴莲") n += 1 p_continue = False elif price_0 >= 150: print(" 这位客人叫卖失败") p_continue = False i += 1 p = n / m print("nn一共有",m,"位客人进行叫卖,其中",n,"位叫卖成功,成交率为",p)
1234567891011121314151617181920212223242526272829303132333435运行结果:
叫卖人数:10000 第 1 位客人开始叫卖,单价为40 抽到了 9 价格变为 60 抽到了 9 价格变为 80 抽到了 3 价格变为 90 抽到了 0 价格变为 100 抽到了 0 价格变为 110 抽到了 5 价格变为 120 抽到了 3 价格变为 130 抽到了 4 价格变为 140 抽到了 7 价格变为 160 这位客人叫卖失败 --中略-- 第 10000 位客人开始叫卖,底价为40 抽到了 1 价格变为 50 抽到了 6 价格变为 60 抽到了 9 价格变为 80 抽到了 1 价格变为 90 抽到了 8 价格变为 110 抽到了 0 价格变为 120 抽到了 2 价格变为 130 抽到了 0 价格变为 140 抽到了 6 价格变为 150 这位客人成功买到了优质榴莲 一共有 10000 位客人进行叫卖,其中 7680 位叫卖成功,成交率为 0.768
123456789101112131415161718192021222324252627282930结果为:0.768
在线试运行:https://onlinegdb.com/X6eBomSYd
#include <stdio.h> //包含标准输入输出的头文件 #include <stdlib.h> //包含用于生成随机数的rand()函数的头文件 #include <stdbool.h> //包含布尔型的头文件 int main(void) { int m,adds,price_0; //只涉及整数运算,声明整型的变量(下同) int i = 1; int n = 0; bool p_continue; //p_continue的值为True或False,因此使用布尔型的变量 printf("叫卖人数:"); scanf("%d",&m); while (i <= m) { printf("nn第%d位客人开始叫卖,底价为40n",i); price_0 = 40; p_continue = true; while (p_continue) { //目前还没学到C语言函数的声明和调用,直接写到一起… adds = rand()%10; if (adds <=6) price_0 += 10; else price_0 += 20; printf(" 抽到了%d,价格变为%dn",adds,price_0); if (price_0 == 150) { printf(" 这位客人叫卖成功n"); n += 1; p_continue = false; } else if (price_0 >= 150) { printf(" 这位客人叫卖失败n"); p_continue = false; } } i += 1; } printf("nn一共有%d位客人进行叫卖,其中%d人叫卖成功,成交率为%.2fn",m,n,(double)n / m); return 0; }
123456789101112131415161718192021222324252627282930313233343536373839404142434445'运行结果:
叫卖人数:10000 第1位客人开始叫卖,底价为40 抽到了3,价格变为50 抽到了6,价格变为60 抽到了7,价格变为80 抽到了5,价格变为90 抽到了3,价格变为100 抽到了5,价格变为110 抽到了6,价格变为120 抽到了2,价格变为130 抽到了9,价格变为150 这位客人叫卖成功 --中略-- 第10000位客人开始叫卖,底价为40 抽到了9,价格变为60 抽到了5,价格变为70 抽到了8,价格变为90 抽到了6,价格变为100 抽到了7,价格变为120 抽到了6,价格变为130 抽到了6,价格变为140 抽到了5,价格变为150 这位客人叫卖成功 一共有10000位客人进行叫卖,其中7761人叫卖成功,成交率为0.78
1234567891011121314151617181920212223242526272829结果为:0.78
(瞄一眼参考答案) 理论计算得P = 0.77,程序模拟结果与其大致吻合,本次实践基本成功。
感谢每一个坚持看到这里的小伙伴!
把自己的思路说出来并让人明白并不容易,而我也正在努力做到这一点。
本人正在读高三,用来学Python和C语言的时间不多,难免有错误和偏颇之处,还请各位多多包涵,不吝指教。
如果觉得这篇文章有用的话,请点一个小小的赞吧~
相关知识
网站程序开发中的支付集成实践指南
怎么拿下一个报恩的榴莲?4个挑榴莲小技巧,实用!
园林绿化工程实践的问题与对策(工程实践论文).doc
改进的花朵授粉算法程序(Matlab)资源
端午节将至,问题还来!粽叶是干垃圾还是湿垃圾?
“开榴莲盲盒”又火了,四招教你最大概率挑出“梦中情莲”
筛选榴莲的方法
探索未来家居:智能用电管理系统——微信小程序实践佳作
榴莲哪个季节成熟?
模拟人生畅玩版喝花草茶任务 卖玫瑰花茶的朋友圈广告
网址: “卖榴莲”问题:概率问题的程序模拟实践 https://m.huajiangbk.com/newsview1210747.html
上一篇: 怎么辨别花胶真假?花胶真假鉴别 |
下一篇: 正宗马来西亚猫山王榴莲多少钱一斤 |