- 已加入
- 2021年2月3日
- 留言内容
- 2
- 编程经验
- Beginner
我的代码有问题。
练习如下:
例如,如果我输入:
49
6
I
结果还可以,但是当我输入时:
45
15
三级
结果不是我所期望的。
它是0.2162171866,但必须是0.0000001324。
有什么建议我的代码有什么问题吗?如何简化代码或进行更正?
这是我的代码:
练习如下:
您仅以一种获胜变体(简单)参加6/49彩票,并且想知道获胜的几率:
-第I类(6个数字)
-II类(5个数字)
-第三类(4个数字)
编写一个控制台应用程序,该应用程序从输入中获得总球数,提取的球数和类别,然后如果使用一个简单的变量,则以10位小数的精度打印获胜赔率。
例如,如果我输入:
49
6
I
结果还可以,但是当我输入时:
45
15
三级
结果不是我所期望的。
它是0.2162171866,但必须是0.0000001324。
有什么建议我的代码有什么问题吗?如何简化代码或进行更正?
这是我的代码:
C#:
using System;
using System.Collections.Generic;
namespace FirstApplication
{
class Program
{
public static void Main()
{
int n = Convert.ToInt32(Console.ReadLine());
int k = Convert.ToInt32(Console.ReadLine());
string category = Console.ReadLine();
decimal total = 0;
switch (category)
{
case "I":
for (int z = 6; z <= 6; ++z)
total = bc(k, 6) * bc(n - k, k - 6) / bc(n, k);
decimal totalx = Convert.ToDecimal(total.ToString("0.0000000000"));
Console.WriteLine(totalx);
return;
case "II":
for (int z = 4; z <= 5; ++z)
total = bc(k, z) * bc(n - k, k - z) / bc(n, k);
decimal totalx1 = Convert.ToDecimal(total.ToString("0.0000000000"));
Console.WriteLine(totalx1);
return;
case "III":
for (int z = 4; z <= 4; ++z)
total = bc(k, z) * bc(n - k, k - z) / bc(n, k);
decimal totalx2 = Convert.ToDecimal(total.ToString("0.0000000000"));
Console.WriteLine(totalx2);
return;
}
Console.Read();
}
public static Dictionary<(int N, int K), decimal> knownValues = new Dictionary<(int N, int K), decimal>();
public static decimal bc(int n, int k)
{
var key = (n, k);
if (!knownValues.ContainsKey(key))
{
if (k == 0 || k == n)
{
knownValues.Add(key, 1);
}
else
{
knownValues.Add(key, bc(n - 1, k - 1) + bc(n - 1, k));
}
}
return knownValues[key];
}
}
}