(2)硬币游戏—— 代码分析与改进

1、将你的仓库Game.git clone到本地, 运行Python 程序,截图

2、修改代码

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import random
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import mlab
from matplotlib import rcParams


# 初始参数设置
Box_sum =500 # 箱子中剩余硬币数量,初始值
People_Flag= random.randint(1,10) # flag 模拟人们取硬币或放硬币的概率 1~10
Threshold = 3.3 # 阈值,可调: 1~Threshold 为取硬币,Threshold+1 ~10 为放硬币
Max_TakeCoin=3 # 最多可取硬币数量
Max_DonateCoin=1 # 最多可放硬币数量

delata=0 # 取、放硬币数量
Box_per_remain= [500] # 每次箱子中硬币余额,list


# 算法模拟
for x in range(1,5000): # 循环次数表示参与人数
flag= random.randint(1,10) # flag 模拟人们取硬币或放硬币的概率
if flag > Threshold:
# 放硬币
delta=random.randint(1,Max_DonateCoin)
delta=random.randint(1,delta) # 模拟了人们捐款可能性,有偏少的倾向
Box_sum =Box_sum + delta
Box_per_remain.append(Box_sum)
else:
# 取硬币
delta=random.randint(1,Max_TakeCoin)
delta=random.randint(delta,Max_TakeCoin) # 模拟了人 取硬币的可能性,偏多的倾向
if Box_sum < delta:
Box_sum =0 # 如果不够取,则取光
else:
Box_sum =Box_sum - delta
Box_per_remain.append(Box_sum)

print(Box_per_remain)


# 绘图区
fig = plt.figure()

## 1. 标题、X、Y 轴 label
plt.title('Subway testing')
plt.xlabel('Time')
plt.ylabel('Money remained')

x= np.arange(len(Box_per_remain))

## 2. data

plt.plot(x,Box_per_remain,color='r')
plt.bar(x,Box_per_remain,alpha=.5,color='g')

plt.show()

修改后的截图如下:

3、代码修改地址

https://gitee.com/lunaonlyone/Game/blob/master/src/GameMain.py

转载于:https://www.cnblogs.com/lunaonlyone/p/7571765.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最少硬币问题是指在给定面额的硬币中,找出能够组成指定金额的最少硬币数。可以使用动态规划来解决这个问题。 以下是用Java实现最少硬币问题的示例代码: ```java public class MinimumCoins { public static int minCoins(int[] coins, int amount) { int[] dp = new int[amount + 1]; Arrays.fill(dp, Integer.MAX_VALUE); dp[0] = 0; for (int i = 1; i <= amount; i++) { for (int j = 0; j < coins.length; j++) { if (coins[j] <= i && dp[i - coins[j]] != Integer.MAX_VALUE) { dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1); } } } return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount]; } public static void main(String[] args) { int[] coins = {1, 2, 5}; int amount = 11; int minCoins = minCoins(coins, amount); System.out.println("Minimum coins required to make " + amount + " is " + minCoins); } } ``` 在上面的代码中,我们使用一个数组dp来存储每个金额所需的最少硬币数。我们首先将dp数组初始化为Integer.MAX_VALUE,然后将dp[0]设置为0,因为组成0元需要0枚硬币。 接下来,我们使用两个嵌套循环来遍历每个金额和每个硬币面额。如果当前硬币面额小于等于当前金额,并且使用当前硬币面额可以组成金额i - coins[j],那么我们更新dp[i]为dp[i - coins[j]] + 1的最小值。最终,dp[amount]存储了组成指定金额所需的最少硬币数。如果dp[amount]等于Integer.MAX_VALUE,则表示无法组成指定金额,返回-1。 在上面的示例中,我们使用coins数组存储硬币面额,amount变量存储指定金额。输出结果为“Minimum coins required to make 11 is 3”,表示组成11元需要3枚硬币,即1枚5元硬币和2枚2元硬币
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值