码迷,mamicode.com
首页 > 其他好文 > 详细

散户炒股票为啥总赔钱?李永乐老师用数学告诉你原因~

时间:2018-05-21 23:01:10      阅读:346      评论:0      收藏:0      [点我收藏+]

标签:在线   imp   币对   case   5.0   硬币   min   switch   class   

看了个视频:《散户炒股票为啥总赔钱?李永乐老师用数学告诉你原因~》(https://weibo.com/3325704142/Gecagg1CK)

根据视频中得出的结论,写了小段代码认证下结论是否正确,经过认证,还真是如此,奇幻!

 

大概就是,两人抛硬币对赌,规则如下:

1)A=正面 B=正面 :A赢3;

2)A=反面 B=反面 :A赢1;

3)其他情况:B赢2;

一个看似公平的游戏,但是如果A将出A面的几率控制在 1/3 ~ 2/5的时候,B赢钱的几率会接近于0~

 

大家可以在这个在线代码(https://tour.golang.org/)运行网站中测试下下面这个代码:

package main

import (
	"fmt"
	"math/rand"
	"time"
)

var min, max float64

func RandomInt(max int) int {
	rand.Seed(time.Now().UnixNano())
	return rand.Intn(max) + 1
}

func manT() int {
	return RandomInt(2)
}

// 1:正面 2:反面
func womanT() int {
	//先获取一个概率,概率在 1/3 ~ 2/5 之间
	var p float64
	for p < min || p > max {
		p = float64(RandomInt(100)) / 100.0
	}
	//fmt.Printf("Probability: %.2f\n", p)

	//将概率*100,得到一个分水岭数字,比如35
	var P int = int(100 * p)

	//然后随机获取一个数字
	//如果大于P(比如:35),那么抛出反面(2);反之抛出正面(1)
	v := RandomInt(100)
	if v > P {
		return 2
	}
	return 1

}

func main() {
	min, max = 1.0/3.0, 2.0/5.0
	fmt.Println(min, max)
	wm := make(map[int]int)

	var man_money int = 0
	var woman_money int = 0
	for i := 0; i < 100; i++ {
		n1 := womanT()
		n2 := manT()
		wm[n1]++ //记录美女所抛硬币

		switch {
		case n1 == 1 && n2 == 1:
			man_money += 3
			woman_money -= 3
		case n1 == 2 && n2 == 2:
			man_money += 1
			woman_money -= 1
		default:
			man_money -= 2
			woman_money += 2
		}
	}

	fmt.Println("玩了100次,美女抛出 ‘正面‘ 和 ‘反面‘ 的次数和概率如下:")
	fmt.Printf("正面 次数:%d 概率: %.2f\n", wm[1], float64(wm[1])/100.0)
	fmt.Printf("反面 次数:%d 概率: %.2f\n", wm[2], float64(wm[2])/100.0)

	fmt.Println("男子和美女所得金额如下:")
	fmt.Println("Man: ", man_money)
	fmt.Println("Woman: ", woman_money)
}

  技术分享图片

 

跑了几次,只要美女控制住概率,发现果然都是美女在赢钱!

散户炒股票为啥总赔钱?李永乐老师用数学告诉你原因~

标签:在线   imp   币对   case   5.0   硬币   min   switch   class   

原文地址:https://www.cnblogs.com/yzhch/p/9069586.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!