【问题标题】:c# programming. making sure there is no duplicatec#编程。确保没有重复
【发布时间】:2014-05-12 20:43:32
【问题描述】:

所以基本上我必须创建一个介于 1-4 之间的彩票程序。用户猜 3 个数字,您必须查看它们是否匹配所有三个数字。我的问题是获得大奖。您必须将您的猜测与正确序列中的随机数相匹配。例如。

if (guess1 == ran1 && guess2 == ran2 && guess3 == ran3)
                Console.WriteLine("$10,000"); 

但是,如果您以不正确的顺序匹配三个数字。你仍然可以得到 1000 美元。但这是我遇到问题的地方。我这样写了 1000 美元的代码

     {if (guess1 == ran1)
                ++matches;
            else
                if (guess1 == ran2)
                    ++matches;
                else
                    if (guess1 == ran3)
                        ++matches;

        }
        {
            if (guess1 == ran1)
                ++matches;
            else
                if (guess1 == ran2)
                    ++matches;
                else
                    if (guess1 == ran3)
                        ++matches;
        }
        {
            if (guess1 == ran1)
                ++matches;
            else
                if (guess1 == ran2)
                    ++matches;
                else
                    if (guess1 == ran3)
                        ++matches;
 if (matches == 3)
                    Console.WriteLine("$1000");

所以每次你赢得大奖,你都会赢得 10,000 美元和 1,000 美元,但这不是我想要的。

有没有我可以解决的问题,所以当用户以正确的顺序输入彩票号码时,他们只能赢得 10,000 美元,而不是两者兼而有之?请注意,这是一个基本的编程课程。没什么特别的。

【问题讨论】:

  • 首先检查用户是否按正确的顺序猜对了它们。 ELSE,看看他是不是猜错了顺序。
  • 我们不知道这段代码是什么。但我可以说肯定有比这更好的方法。 “编程 = 算法 + 数据结构”。在这里我没有看到任何数据结构的使用。

标签: c#


【解决方案1】:

LINQ 好用吗?

bool userGuessedInOrder = guesses.SequenceEqual(correctNumbers);

bool userGuessedInSomeOrder = !guesses.Except(correctNumbers).Any();

【讨论】:

  • 我想念Except 如何处理订单?
  • @Sriram 没有。这就是目标,不是吗?
  • 说实话,我没有完全阅读这个问题。也许我不会。我的评论完全基于您的变量名userGuessedInSomeOrder,我读到这意味着用户按预期顺序猜测。 FWIW 我不是反对者。如果这是 OP 的要求,那么我的投票肯定在等着你。
  • @SriramSakthivel 有两个奖项:一个是按正确顺序猜对数字的,另一个是按错误顺序猜对数字的。
  • @ClickRick 感谢您的清理,我不明白什么转储对此表示反对。这是我能想到的最好的答案。 +1 Rotem
【解决方案2】:

作为一个稍微简单的基于 LINQ 的解决方案,这说明了如何将数字封装在数据结构中,以及如何将算法封装在函数中。

public static int Payout(IEnumerable<int> randoms, IEnumerable<int> guesses)
{
    if (randoms.SequenceEqual(guesses))
        return 10000;
    IEnumerable<int> sortedRandoms = randoms.OrderBy(a => a);
    IEnumerable<int> sortedGuesses = guesses.OrderBy(a => a);
    if (sortedRandoms.SequenceEqual(sortedGuesses))
        return 1000;
    return 0;
}

【讨论】:

    【解决方案3】:
    if (guess1 == ran1 && guess2 == ran2 && guess3 == ran3)
    {
        Console.WriteLine("$10000");
    }
    else if ((guess1 == ran1 || guess1 == ran2 || guess1 == ran3) && 
             (guess2 == ran1 || guess2 == ran2 || guess2 == ran3) && 
             (guess3 == ran1 || guess3 == ran2 || guess3 == ran3))
    {
        Console.WriteLine("$1000");
    }
    

    这应该可以。你可能还想检查你的变量名;看来您可能忘记在比较中增加变量名称末尾的数字。

    【讨论】:

    • 问题表明赢得大奖赢得较小的奖金。
    • 不,问题表明他的问题是他使用的代码同时触发了 10,000 美元和 1,000 美元的奖金,但他只希望大奖得主获得 10,000 美元的奖金。 “用户中了 10,000 美元和 1,000 美元。无论如何我可以解决它。所以当用户以正确的顺序输入彩票号码时,他们只能赢得 10,000 美元不是两者?”
    • 哇,我把问题的那段读了两次,两次都读错了!
    • 没问题。确保您理解我的答案,以便您可以将其应用于您面临的下一个挑战。特别是 &&|| 运算符。
    • 这有一些情况,但不是全部。如果随机数是{1,2,3},那么如果用户猜到{2,3,1}{3,1,2},您将正确支付,但如果他们猜到{1,3,2}{3,2,1}{2,1,3},您将无法支付。
    猜你喜欢
    • 2015-02-10
    • 2021-01-02
    • 2015-03-30
    • 1970-01-01
    • 2012-12-16
    • 2016-04-17
    • 2010-12-21
    • 2022-01-14
    • 2015-07-04
    相关资源
    最近更新 更多