已加入
2021年2月3日
留言内容
2
编程经验
Beginner
我的代码有问题。

练习如下:

您仅以一种福彩12选5走势图变体(简单)参加6/49彩票,并且想知道福彩12选5走势图的几率:

-第I类(6个数字)

-II类(5个数字)

-第三类(4个数字)

编写一个控制台应用程序,该应用程序从输入中获得总球数,提取的球数和类别,然后如果使用一个简单的变体,则以10位小数的精度打印福彩12选5走势图赔率。

例如,如果我输入:

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];
        }
    }
}
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,498
地点
悉尼,澳大利亚
编程经验
10+
结果不是我所期望的。
作为开发者,您不仅要看结果。您需要调试代码。在代码的顶部设置一个断点,然后逐行浏览断点,检查每一步的状态。您应该确切地知道在执行步骤之前会发生什么,并且可以查看它在执行之后是否确实发生。一旦现实与预期有所不同,您就发现了一个问题,可以对此进行专门调查。如果您仍然无法确定原因或解决方法,至少可以为我们提供更多相关信息。
 
已加入
2021年2月3日
留言内容
2
编程经验
Beginner
作为开发者,您不仅要看结果。您需要调试代码。在代码的顶部设置一个断点,然后逐行浏览断点,检查每一步的状态。您应该确切地知道在执行步骤之前会发生什么,并且可以查看它在执行之后是否确实发生。一旦现实与预期有所不同,您就发现了一个问题,可以对此进行专门调查。如果您仍然无法确定原因或解决方法,至少可以为我们提供更多相关信息。
我知道,终于解决了。 :)
 
最佳 底部