【发布时间】:2021-05-06 14:27:47
【问题描述】:
using System;
namespace FirstApplication
{
class Program
{
public static void Main()
{
int n = Convert.ToInt32(Console.ReadLine());
int k = Convert.ToInt32(Console.ReadLine());
string category = Console.ReadLine();
double total = 0;
switch (category)
{
case "I":
total = bc(k, 6) * bc(n - k, k - 6) / bc(n, k);
Console.WriteLine("{0:F10}", total);
return;
case "II":
total = bc(k, 4) * bc(n - k, k - 4) / bc(n, k);
Console.WriteLine("{0:F10}", total);
return;
case "III":
total = bc(k, 2) * bc(n - k, k - 2) / bc(n, k);
Console.WriteLine("{0:F10}", total);
return;
}
Console.Read();
}
private static double bc(decimal n, decimal k)
{
if (k == 0 || k == n)
return 1;
return bc(n - 1, k - 1) + bc(n - 1, k);
}
}
}
我的代码有问题。
练习如下:
您参加 6/49 彩票只有一个中奖变体(简单),并且您想知道您的中奖几率:
-I 类(6 个数字)
-在 II 类(5 个数字)
-在类别 III(4 个数字)
编写一个控制台应用程序,输入总球数、提取球数和类别,然后如果您使用一种简单的变体,则以小数点后 10 位的精度打印获胜几率。
例如,如果我输入:
49
6
我
结果还可以,但是当我输入时:
45
15
III
我没有得到任何结果。
任何建议我的代码有什么问题?
【问题讨论】:
-
你一步步调试问题了吗?我敢打赌,您会比这里的任何人都更快地发现问题,因为您最清楚自己的应用应该做什么以及它应该做什么。
-
可以,我调试了,但还是查不出来是什么问题。
-
那么在调试时究竟会发生什么?
bc为案例"III"返回什么?在bc中设置一个断点,看看它是否被命中。如果它逐行通过您的代码来查看它的行为与您期望的不同之处。我们不能说你所期望的,只有你可以。 -
想一想:如果您对
k和n的输入都是奇数,那么if (k == 0 || k == n)会变成真的吗?
标签: c# visual-studio for-loop numbers case