如何计算c#彩票的中奖机会? 使用系统; 命名空间优先应用程序 { 班级计划 { 公共静态void Main() { int n=Convert.ToInt32(Console.ReadLine()); int k=Convert.ToInt32(Console.ReadLine()); 字符串类别=Console.ReadLine(); 双倍合计=0; 开关(类别) { 案例“一”: 总数=bc(k,6)*bc(n-k,k-6)/bc(n,k); Console.WriteLine(“{0:F10}”,总计); 返回; 案例“二”: 总计=bc(k,4)*bc(n-k,k-4)/bc(n,k); Console.WriteLine(“{0:F10}”,总计); 返回; 案例“三”: 总数=bc(k,2)*bc(n-k,k-2)/bc(n,k); Console.WriteLine(“{0:F10}”,总计); 返回; } Console.Read(); } 专用静态双bc(十进制n,十进制k) { 如果(k==0 | | k==n) 返回1; 返回bc(n-1,k-1)+bc(n-1,k); } } }

如何计算c#彩票的中奖机会? 使用系统; 命名空间优先应用程序 { 班级计划 { 公共静态void Main() { int n=Convert.ToInt32(Console.ReadLine()); int k=Convert.ToInt32(Console.ReadLine()); 字符串类别=Console.ReadLine(); 双倍合计=0; 开关(类别) { 案例“一”: 总数=bc(k,6)*bc(n-k,k-6)/bc(n,k); Console.WriteLine(“{0:F10}”,总计); 返回; 案例“二”: 总计=bc(k,4)*bc(n-k,k-4)/bc(n,k); Console.WriteLine(“{0:F10}”,总计); 返回; 案例“三”: 总数=bc(k,2)*bc(n-k,k-2)/bc(n,k); Console.WriteLine(“{0:F10}”,总计); 返回; } Console.Read(); } 专用静态双bc(十进制n,十进制k) { 如果(k==0 | | k==n) 返回1; 返回bc(n-1,k-1)+bc(n-1,k); } } },c#,visual-studio,for-loop,numbers,case,C#,Visual Studio,For Loop,Numbers,Case,我的代码有问题 工作内容如下: 您参加6/49彩票,只有一个中奖变体(简单),您想知道您中奖的几率: -第一类(6个) -第二类(5个) -第三类(4个) 编写一个控制台应用程序,从输入的总球数、提取的球数和类别中获取,然后,如果使用一个简单变量,则以10位小数的精度打印获胜几率 例如,如果我输入: 49 六, 我 结果正常,但当我输入时: 45 十五 三, 我没有得到任何结果 有什么建议我的代码有什么问题吗?我认为你的代码没有任何问题。它只会运行很长时间,因为您一次又一次地使用相同的值调用bc

我的代码有问题

工作内容如下:

您参加6/49彩票,只有一个中奖变体(简单),您想知道您中奖的几率:

-第一类(6个)

-第二类(5个)

-第三类(4个)

编写一个控制台应用程序,从输入的总球数、提取的球数和类别中获取,然后,如果使用一个简单变量,则以10位小数的精度打印获胜几率

例如,如果我输入:

49

六,

结果正常,但当我输入时:

45

十五

三,

我没有得到任何结果


有什么建议我的代码有什么问题吗?

我认为你的代码没有任何问题。它只会运行很长时间,因为您一次又一次地使用相同的值调用
bc
。我添加了一个字典来存储和查找已计算的值:

private static Dictionary knownvalue=new Dictionary();
专用静态双bc(整数n,整数k)
{
var键=(n,k);
如果(!knownValues.ContainsKey))
{
如果(k==0 | | k==n)
{
增加(键1);
}
其他的
{
添加(键,bc(n-1,k-1)+bc(n-1,k));
}
}
返回knownValue[键];
}

它在小于6秒的时间内返回,45,15,III输入的值为0.0364626616。我不知道这是否正确,但至少它终止了。也许你的老师想让你试试这个,学习递归和计算时间。

你有一步一步地调试这个问题吗?我打赌你会比这里的任何人都更快地发现问题,因为你最清楚你的应用程序应该做什么,以及它应该做什么。当然,我调试过,但我仍然无法找出问题所在。那么调试时到底发生了什么?对于案例
“III”
,bc返回什么?在
bc
中放置一个断点,查看是否命中它。如果它确实逐行遍历您的代码,以查看其行为与您期望的不同之处。我们不能告诉你你想要什么,只有你能。我理解,谢谢。想想:如果你对
k
n
的输入都是奇数,那么
如果(k==0 | | k==n)
会变成真的吗?它给了我编译错误,不知道为什么..编译器知道,并且正试图告诉你。如果您使用的是旧版本的C#它可能不知道命名元组
(int n,int k)
。我解决了它,谢谢您的帮助!