Re: [闲聊] 1%的抽卡率抽100次机率是63.4%?

楼主: seeghost945 (见鬼)   2019-06-04 11:17:22
※ 引述《fragmentwing (片翼碎梦)》之铭言:
: https://imgur.com/fs1T6T9
: 献丑
: 原本想说要用log去算,发现超不准,只好直接算了
: 怕超过2*32次,就用10次和0.1的机率去算了
: 至少一次的机率==一次+两次+...+N(抽的总次数)次
: 以下程式码,才正式学C不到10天,请鞭小力点
: #include<stdio.h>
: #include<math.h>
: int cntnis(int a,int b){
: int top=1,bottom=1;
: for(int i=1;i<=b;i++){
: top*=(a-i+1);
: bottom*=i;
: }
: int compute=top/bottom;
: return compute;
: }
: double multi(double have,int havet,int nohavet){
: double result=pow(have,havet)*pow((1.0-have),nohavet);
: return result;
: }
: int main(){
: int times,cntn,i;
: double haveis,mulh,probability,expectation=0;
: times=10;
: haveis=0.1;
: for(i=1;i<=times;i++){
: cntn=cntnis(times,i);
: mulh=multi(haveis,i,times-i);
: probability=cntn*mulh;
: printf("抽 %d 次中,抽中 %d 张的机率= %lf\n",times,i,probability);
: expectation+=probability*i;
: }
: printf("抽 %d 次,机率 %.3lf 期望值为: %lf",times,haveis,expectation);
: return 0;
: }
看到原PO说刚学C就想拿来运用,想要鼓励一下原PO,
这才是学程式的精神,学了就是有需要就要想到它,把它要拿出来用
有一些人认为C太低阶,程式码太长,用Python或Matlab打起来比较简单
在这个案例上是没错啦,毕竟只是跑10次循环而已
但如果是跑上万次、甚至是百万次的话,我就建议用C了
我大学念资工时,有一堂课叫做 随机程序
专门就是再学如何写有效率的程式去模拟随机环境,统计十万百万次后,比较是否符合数学上计算的机率
例如:
扑克牌抽三张都是红心,模拟百万次的成功次数
有三个袋子,里面各有红白三颗球,A袋摸一颗球放B袋,B袋摸一颗放C袋,最后C袋摸出红球,模拟百万次的成功次数
诸如此类的各种机率问题,都可以用程式去模拟十万、百万、甚至千万次
这种循环都是要跑很久的,就比较需要可以碰触到低阶的C去写程式
可以break循环就break,尽可能的减少不必要的过程
Matlab就很适合跑一些很难去写的数学式算法,因为都建好函数了
Laplace阿、Fourier都可以直接呼叫
可以画图也是一大优势
我上面用C跑完的百万次随机模拟结果,也可以丢到Matlab去跑分布图 赞赞
再来Matlab是以矩阵做运算的,也很适合去跑图像分析和图像处理
当初实验室学长也有在用Matlab做人脸分析处理的,不过我没有涉猎就不赘述了
Python是我目前看过最好学的程式了
直觉符合人类语言、程式短易读易改、主流多数人都会用
我自己就google自学Python玩过网络爬虫、wikia文本处理机器人、聊天机器人
总结来说
C 适合新手打基础、或是写需要大量运算需要增加效率时使用
Matlab 适合数学计算、数位图像处理
Python 适合快速写简单程式、或是开发一些应用
以原原PO的漫画中例子,我们就可以以C做模拟:
SSR机率1%,抽100次中,如果有中SSR就算成功,模拟百万次,成功几次
以数学理论上就是1-99%^100,这就可以直接在Matlab或是Python上做
在来比较最后的数值是否相似,以两种不同的路来验证最终结果没问题
以上小弟浅见,还望各路大神鞭小力点
作者: l22573729 (寅猷襹鵀)   2019-06-04 11:20:00
我也是从c开始学
作者: hedgehogs (刺猬)   2019-06-04 11:23:00
快推免得被说看不懂
作者: kaj1983   2019-06-04 11:24:00
我是从QB开始学...
作者: aleezible (laterproblem)   2019-06-04 11:24:00
喔喔,对对对,跟我想得差不多
作者: jackwula9211 (Carbon.)   2019-06-04 11:25:00
我那时候大家都学C++啊,其实还是满好用的啦
作者: aikotoba (aikotoba)   2019-06-04 11:26:00
其实我也是这么想的
作者: arrenwu (键盘的战鬼)   2019-06-04 11:29:00
其实我觉得第一个学C挺怪的就是
作者: js850604 (jack0604)   2019-06-04 11:29:00
完了我只用过MATLAB
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 11:31:00
python真的很不错,c和c++的语法和方法太繁复了,做什么都要一套流程
作者: arrenwu (键盘的战鬼)   2019-06-04 11:32:00
static-typed 语言写起来就很累啊C/C++ 更麻烦的是没有 garbage collection
作者: bbkingck (Twister)   2019-06-04 11:34:00
大一上学校教c++根本害人
作者: arrenwu (键盘的战鬼)   2019-06-04 11:35:00
不过现在 MATLAB 做得到的事情Python几乎都可以做了吧?
作者: roger840410 (roger)   2019-06-04 11:36:00
我之前大学资工三个班 其他两班学c++我们学c
作者: rofellosx (鏖)   2019-06-04 11:36:00
第一个学C怪在哪?顶多就没python丰富 支援一堆..
作者: arrenwu (键盘的战鬼)   2019-06-04 11:36:00
第一个学C很ok,是学C++很怪
作者: CorkiN (柯基)   2019-06-04 11:37:00
很多工学院大一也都教C++但感觉不是很适合...
作者: arrenwu (键盘的战鬼)   2019-06-04 11:37:00
我知道啊 因为我们当初也是教C++ 课本就蚂蚁 对吧?
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 11:38:00
c->c++->others
作者: seaEPC (没看见,我没看见 >_<)   2019-06-04 11:38:00
语言好不好用看用在哪,杀鸡用牛刀怪刀不好用是很奇怪的事
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 11:39:00
c算很简单的,c++导入物件概念,再来是其他
作者: Xinlong (Ashyjet)   2019-06-04 11:41:00
真的是要看用在什么地方 如果你是写driver跟写app用的语言本来就不会一样
作者: twosheep0603 (两羊)   2019-06-04 11:42:00
先学c/c++可以方便衔接计算机概论的硬件知识
作者: arrenwu (键盘的战鬼)   2019-06-04 11:43:00
我之所以提C比C++做为第一个语言较佳就是因为硬件的关联我不太懂为什么教C++的一开始就 cout 和 << ,这两者涉及了class 和 operator overloading 的概念而且很多教授直接喷 string class 出来存字串这反而会妨碍学生理解字串的处理但是在 C 里面你就只有 char[]
作者: Anzar (是一只安萨)   2019-06-04 11:45:00
arrenwu有没有北七如我也看的懂得说法啊 ....
作者: arrenwu (键盘的战鬼)   2019-06-04 11:45:00
简单的说就是C++的教学一开始常常使用高级咒文,但C会从初级元素魔法开始
作者: CorkiN (柯基)   2019-06-04 11:46:00
楼上把c++primer前面几章读一下就会大概知道a大在说啥
作者: Xinlong (Ashyjet)   2019-06-04 11:46:00
c++跟c的关系 用比较简单的说法就是c++多了物件概念
作者: rofellosx (鏖)   2019-06-04 11:47:00
过时的高级咒文... 理解物件我认为要学java..
作者: Xinlong (Ashyjet)   2019-06-04 11:47:00
c比c++的东西少 当然比较好学(X
作者: arrenwu (键盘的战鬼)   2019-06-04 11:47:00
所以你在用C的魔法时,虽然看起来好像不太俐落,但你很了解你在干什么
作者: laechan (挥泪斩马云)   2019-06-04 11:48:00
用c写一些数学算式还没那么不堪啦,纯文字下c算简单易懂
作者: arrenwu (键盘的战鬼)   2019-06-04 11:48:00
C++是高级魔法师把复杂魔法简化给你用,但你其实只看得到效果跟某些初级魔法很像,但实际上哪里不同你搞不清楚
作者: Anzar (是一只安萨)   2019-06-04 11:48:00
你这例子真是浅显易懂,感恩~
作者: CorkiN (柯基)   2019-06-04 11:49:00
a大好神==
作者: eastnoon (二氧化碳)   2019-06-04 11:49:00
我先推才不会让人觉得我看不懂
作者: Anzar (是一只安萨)   2019-06-04 11:49:00
Cork要求的也太困难了啦 grgrgr
作者: arrenwu (键盘的战鬼)   2019-06-04 11:49:00
因为我在学C之前我从来没搞懂C++到底怎么弄字串的
作者: fragmentwing (片翼碎梦)   2019-06-04 11:50:00
fortran跟C到底哪个快啊 之前看到有人说90在现代也还是很快
作者: Xinlong (Ashyjet)   2019-06-04 11:50:00
换CPU比较快(X
作者: arrenwu (键盘的战鬼)   2019-06-04 11:51:00
而Java跟C++这两大高阶魔法系统有一个很类似的哲理,但有
作者: forsakesheep (家裡蹲魯廢肥宅)   2019-06-04 11:51:00
这篇给我的感想就是程式设计师=魔法师
作者: rofellosx (鏖)   2019-06-04 11:51:00
换硬件比较快+1
作者: fragmentwing (片翼碎梦)   2019-06-04 11:52:00
之前学fortran字串理解也还行,毕竟宣告要lenfortran像是在打文章,宣告用integer,dimension,allocatable之类,通通没有缩写
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 11:53:00
java有很多东西帮你做好了,抠他就可以了
作者: Anzar (是一只安萨)   2019-06-04 11:53:00
奇怪,印象中有看到Java要消失不支援的新闻
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 11:54:00
只是从c跳到java会不习惯,所以接c++比较妥当
作者: rofellosx (鏖)   2019-06-04 11:55:00
c跳c++只会混乱吧..
作者: arrenwu (键盘的战鬼)   2019-06-04 11:55:00
是不习惯标准函式库太强太威猛吗XD
作者: CorkiN (柯基)   2019-06-04 11:56:00
这串钓到一堆神人==
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 11:56:00
c接c++不习惯你是开玩笑,同一个妈生的程式语言
作者: fragmentwing (片翼碎梦)   2019-06-04 11:57:00
对了感谢鼓励
作者: dieorrun (Tide)   2019-06-04 11:58:00
高阶语言逻辑都差不多 跳来跳去很快的 玩单芯片才痛苦
作者: arrenwu (键盘的战鬼)   2019-06-04 11:58:00
应该说,你到Java不习惯的东西,在C++也会不习惯Java只是从syntax上面直接强迫你在精神上进入OOP的世界
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 11:59:00
当然啊,高阶的语言大家的电脑都看得懂,特别用一种机器就要用它的机器语言
作者: arrenwu (键盘的战鬼)   2019-06-04 12:00:00
但是在怎么破烂的机器 现在应该都有 c compiler吧
作者: jonathan793 (pusheen cat)   2019-06-04 12:00:00
c++跟c差很多好吗? 你才在开玩笑
作者: Stat14 (统计14)   2019-06-04 12:01:00
我觉得学数学比较有用KAPPA
作者: arrenwu (键盘的战鬼)   2019-06-04 12:01:00
我觉得他应该是想要说 C code 放到 C++ 不会出现error啦
作者: fragmentwing (片翼碎梦)   2019-06-04 12:01:00
从fortran往C开始学超不适应一堆东西会撞到比方说C的continue是fortran的cycle然后fortran自己有另一个代表不做事的continue,常用来跟goto搭配,然后fortran的goto是用行代码(据说有不少资管唸四年还不知道行代码是什么呢),C是用标签搭配goto
作者: Ikaros1110 (神之羽)   2019-06-04 12:01:00
c到c++直接回不去
作者: rofellosx (鏖)   2019-06-04 12:02:00
C跳C++会混乱是 你会下意识用C的概念去学 问题是物件
作者: xdavidchen1 (不信神的神父)   2019-06-04 12:03:00
c_chat(X) C++chat(O)
作者: rofellosx (鏖)   2019-06-04 12:03:00
完全是另一个世界 很多C的概念根本不适用 加上语法像
作者: devilkool (对猫毛过敏的猫控)   2019-06-04 12:03:00
fortran有的老传产还在用
作者: fragmentwing (片翼碎梦)   2019-06-04 12:04:00
第二不适应的是% C是mod fortran是要把资料型态module内的东西拿出来用才会% 然后在C这功能好像是用.?不过C的module似乎很少用,毕竟class比较方便的样子最不适应的是 fortran的函式是call by reference C是 call by value搭配address靠 讲到fortran那天导聚教授问怎么会用这个,教授自
作者: NerVGear (Phantom)   2019-06-04 12:06:00
学C很合适吧 指标那边也带你学硬件
作者: fragmentwing (片翼碎梦)   2019-06-04 12:06:00
己是学C,我也觉得系上为什么要教这个……我们原本要学python的说指标和指标与阵列的一些关系,我花了一个半小时才弄懂
作者: NerVGear (Phantom)   2019-06-04 12:08:00
但是这学期上swift完全不知道在干嘛==
作者: jeffy84123   2019-06-04 12:09:00
各位讨论这么多,结果你们到底是在讨论c++ 几?
作者: fragmentwing (片翼碎梦)   2019-06-04 12:09:00
C的goto已经有放限制器只能作用在同一block内了你知道,fortran的goto是可以从第十行跳到倒数三行的吗 所以fortran的goto真的是太过强大的东西,没写注解会让交接的人很头痛
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 12:12:00
指标和参考是让你懂,c所用的都是最基础的观念,python就没想得这么麻烦,我要用阵列要传参数当然是要它的值啊,我还特地送地址过去干嘛,我到你家门口告诉你地址到我家取货,干嘛不顺便送给你咧
作者: NerVGear (Phantom)   2019-06-04 12:13:00
用指标是让你跟副程式沟通的好ㄇ==
作者: fragmentwing (片翼碎梦)   2019-06-04 12:13:00
没 阵列是传址的因为整个传过去会太慢
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 12:14:00
我说学校教你基础概念当然用最基础的c啊
作者: fragmentwing (片翼碎梦)   2019-06-04 12:15:00
比如你传一个a[] 其实是传a[0]的位址过去这在取址运算子&上很明显
作者: NerVGear (Phantom)   2019-06-04 12:16:00
那应该学组语 真 底层
作者: fragmentwing (片翼碎梦)   2019-06-04 12:16:00
所以scanf对char[]是不用&的
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 12:16:00
不在c上面告诉你不然在哪边告诉你
作者: xsdferty035 (Free逛逛)   2019-06-04 12:18:00
我以为我在C洽原来是软件版
作者: NerVGear (Phantom)   2019-06-04 12:19:00
不过python速度太慢惹 算法测资都测不过QQ
作者: jeffy84123   2019-06-04 12:19:00
不同情况适合不同语言写,根本没什么好比的
作者: arrenwu (键盘的战鬼)   2019-06-04 12:20:00
算法测资测不过怪Python慢好像不太对吧
作者: NerVGear (Phantom)   2019-06-04 12:22:00
速度超时啊应该说时间超时
作者: arrenwu (键盘的战鬼)   2019-06-04 12:22:00
@Giornno Python的 List 是传地址没错喔
作者: arrenwu (键盘的战鬼)   2019-06-04 12:23:00
是MATLAB传才是整个 deep copy一般时间超时是时间复杂度不一样了吧?
作者: NerVGear (Phantom)   2019-06-04 12:24:00
时间复杂度一样啊 但用python跑就比较慢啊
作者: arrenwu (键盘的战鬼)   2019-06-04 12:24:00
挖 你那测资也太..严苛了吧
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 12:26:00
什么,我误解了这么久吗
作者: NerVGear (Phantom)   2019-06-04 12:26:00
之前忘了在学哪个算法python就要跑0.26秒 但标准0.25
作者: jeffy84123   2019-06-04 12:26:00
这很正常吧 程式设计理念不一样
作者: arrenwu (键盘的战鬼)   2019-06-04 12:26:00
你现在去run: x = [1,2,3] -> y=x然后改 y[0],你会发现x的内容也会被改道
作者: dryadl88908 (闇夜星子)   2019-06-04 12:30:00
不懂怪在哪,会一个就会全部了,重点在培养写程式的思考方式,只是不同语言程式的语法不同而已
作者: sleepybaby (困宝)   2019-06-04 12:31:00
C_Chat 又变C讨论板了(为什么要说又呢
作者: jeffy84123   2019-06-04 12:33:00
算法跟资料结构搞好比用哪个语言重要
作者: Giornno (乔鲁诺.乔三槐)   2019-06-04 12:34:00
没错啊,如果总是写出复杂度平方以上的算法,用再快的语言也没救
作者: blazewings   2019-06-04 12:38:00
我直上C+++结果现在学R、Python、java时有障碍...
作者: g5637128 (帮QQ)   2019-06-04 12:41:00
作者: jeffy84123   2019-06-04 12:41:00
你是学c++几?
作者: ttPttPtt (ttPtt)   2019-06-04 12:46:00
现在都2019了,还有人在C+++==
作者: arrenwu (键盘的战鬼)   2019-06-04 12:48:00
其实你就想,很多人跑模拟还在用MATLAB,所以其实速度上大家不见得会追求到那么极致
作者: kaj1983   2019-06-04 12:48:00
个人经验有障碍的通常不是语言差异遇过几个文组的没学过c、c++还是写得有声有色研究所才开始学写程式的人也不少
作者: rofellosx (鏖)   2019-06-04 12:50:00
最好是学一个就全部都会 ..工具方法都不太一样..
作者: NerVGear (Phantom)   2019-06-04 12:55:00
matlab速度很快吧==算矩阵谁比他快的
作者: geroge0820 (可.....可恶)   2019-06-04 12:56:00
应该是说学会一个 其他就触类旁通 很快就会了
作者: ykes60513 (いちご)   2019-06-04 12:58:00
Python速度慢 语法又很宽松 还是很多人用啊
作者: rofellosx (鏖)   2019-06-04 13:18:00
宽松?
作者: kzlivetune (livetune)   2019-06-04 13:23:00
对啊我以前也这样说可是没人认同
作者: as80110680   2019-06-04 13:33:00
语言确实有很多共同观念,例如基本的循环递回算法,但多的是不共通的语言特性,内存分配、指标、reference,不要以为像reference很容易,光是c++的左值右值就搞死你了,我到现在都不敢说我多会c++
作者: super502 (芋片)   2019-06-04 13:35:00
以美国公司面试都要现场写code来说 你说你要以python来接受测试是会被工程师瞧不起的 反而资料结构跟算法学好来 公司看到你特别的地方会直接给你钱请你去总公司面试
作者: arrenwu (键盘的战鬼)   2019-06-04 13:36:00
用Python写code会被瞧不起? 现在还有这问题喔?我知道面试好像比较偏爱Java没错
作者: a2334436 (<lol>)   2019-06-04 13:38:00
优文
作者: greatloser (Alfred)   2019-06-04 13:48:00
目前大三资工,后悔小时候没多接触程式,现在很痛苦
作者: arrenwu (键盘的战鬼)   2019-06-04 13:49:00
别怕啊 这一两个学期你降会很习惯了
作者: as80110680   2019-06-04 13:55:00
我大二才从文组转到资工,有兴趣很快就会习惯了
作者: archer646 (DozinessIsGood)   2019-06-04 14:04:00
我一下写c一下写verilog 就快死了
作者: banana1 (香蕉一号)   2019-06-04 14:05:00
国中的时候摸过C,隔了十几年年没碰程式,之后看python还是很容易上手
作者: Litfal (Litfal)   2019-06-04 14:17:00
想写程式练功心态是对的啦,但这问题真的不用循环来算用上机率统计和常态分布的概念,循环可以省起来
作者: kaltu (ka)   2019-06-04 14:26:00
除了要接着学资料结构和组合语言的资工系学生之外,母语都没有必要选CC的learning curve太反人类,母语腔调又很难摆脱,用他当母语荼毒过的人脑袋直接上了思想僵化+9的DEBUFF要理解其他paradigm难度直线往上跳一堆人拿着C++、JVM Python照着C的convention在写把C library字典对换成C++ equivalent就当自己在写C++,连template都不会用C++自己就算不用C style的for(int i … ),我觉得Iterator比较潮,不不通通来给我用range-based for开个static public Main()从头到尾call static method,什么是OO?什么是design pattern?DP我知道啊 我高中ZeroJudge就在用的Dynamic Programming那个嘛然后跟你说“啊每个语言都一样,会C就会写C++/Java/…,你看会动啊!”每种语言都有他们自己特殊的味道那种觉得语言没差都一样,通通照着自己那一套写的人,写出来的东西其他人合作起来有多臭自己都闻不出来举个例子,要写Python就算没办法写得够Pythonic,至少codestyle给我去把PEP8读过一遍再来,私人专案没关系,要公开之前先sanitize一下不要臭到别人也不是说写C的就不臭,去翻一下GNU standard library人家是用怎么样的惯例在写C的,不要自己恶搞能把虚拟码换成某种语言跑起来,不代表你会那种语言,大家都有的功能不重要,重点是你有没有弄懂为什么这个语言存在的核心feature和什么才是他的特色。嫌Python慢之前,如果你知道Cython在干嘛,知道Python为什么又称glue language,你就会用C来写core然后Python写wrapper的方式来Pythonic地实作你的算法然后再接驳给其他系统Python的设计目的是减少人类的开发时间和各种重要元件之间的串接overhead、作为复杂系统的前端语言,例如深度学习引擎不约而同选用Python作为前端,C/CUDA作为后端一样
作者: chean1020 (嘻嘻)   2019-06-04 14:32:00
结果这一串没有经典引战笑话XDDD,我以为是有人引战说了什么xxx是世界上最好的语言才这么多推
作者: laechan (挥泪斩马云)   2019-06-04 14:45:00
看来专家很多,想问一下,为啥学校教的跟业界要的落差很大
作者: greatloser (Alfred)   2019-06-04 14:47:00
要引战的话先从tab还是4格空白开始聊吧再来聊IDE背景颜色要深色还浅色
作者: arrenwu (键盘的战鬼)   2019-06-04 14:56:00
我支持IDE背景要深色
作者: zybaster (小赛)   2019-06-04 14:58:00
应该说学c容易习惯从下往上堆的思考,而c++,java..etc通常是由上往下长的思路去设计的,没切换过来撞墙是必然的
作者: shuncheng (shuncheng)   2019-06-04 14:59:00
我都用tab 打C用深色 Matlab用浅色 Latex深浅看心情
作者: rofellosx (鏖)   2019-06-04 15:09:00
因为学校不会教你实作...要自行摸索再来C++的教科书很烂
作者: cayalst (highlight)   2019-06-04 15:15:00
从C开始之后学java 现在学python轻松多
作者: arrenwu (键盘的战鬼)   2019-06-04 15:57:00
其实1堂课18周还满久的啦XD
作者: sarsman (DeNT15T♠)   2019-06-04 16:17:00
Code_Chat
作者: an94mod0 (an94mod0)   2019-06-04 16:40:00
现在好像战不了Vim或Sublime了?

Links booklink

Contact Us: admin [ a t ] ucptt.com