c#编程。确保没有重复

时间:2014-05-11 16:50:44

标签: c#

所以基本上我必须创建一个介于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美元和1000美元,但这不是我想要的。

无论如何我可以解决它,所以当用户以正确的顺序输入彩票号码时,他们只赢得10,000美元,而不是两者都赢?请注意,这是一个基本的编程课程。没什么好看的。

3 个答案:

答案 0 :(得分:3)

LINQ是否喜欢?

bool userGuessedInOrder = guesses.SequenceEqual(correctNumbers);

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

答案 1 :(得分:0)

作为一个稍微简单的基于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;
}

答案 2 :(得分:-1)

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");
}

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