C#练习题答案: 49-6 49的LOTTO 6【难度:2级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

49-6 49的LOTTO 6【难度:2级】:

答案1:

using System;
using System.Collections.Generic;
using System.Linq;

public class LOTTO
{
  public static int[] NumberGenerator()
  {
    List<int> numbers = Enumerable.Range(1, 49).ToList();
    var rnd = new Random();
    
    numbers = numbers.OrderBy(x => rnd.Next()).ToList();
    numbers = numbers.Take(6).OrderBy(x=>x).ToList();   
    numbers.Add(new Random().Next(0,10));
    
    return numbers.ToArray();
  }
  
  public static int CheckForWinningCategory(int[] checkCombination, int[] winningCombination)
  {    
     var matches = checkCombination.Take(6).Intersect(winningCombination.Take(6)).Count();     
     var score = 2*(6-matches)+2;
     
     if(checkCombination[6] == winningCombination[6]) 
       score--;

      return score > 9 ? -1 : score;
  }
}

答案2:

using System;
using System.Linq;

public class LOTTO
{
  private static Random rand = new Random();
  private static int[] numbers = Enumerable.Range(1,49).Select(i => i).ToArray();
  
  public static int[] NumberGenerator()
  {
    //return new int[0];
        
    return numbers.OrderBy(o => rand.Next(-1,2)).OrderBy(o => rand.Next(-1,2)).Take(6).OrderBy(o => o).Concat(new int[] { rand.Next(0, 10) }).ToArray();
  }
  
  public static int CheckForWinningCategory(int[] checkCombination, int[] winningCombination)
  {
    bool szIsCorrect = checkCombination[6] == winningCombination[6];
    var checkCombination6 = checkCombination.Take(6).ToArray();
    var count = 0;
    for(int i = 0; i < winningCombination.Length - 1; i++)
    {
      if(checkCombination6.Contains(winningCombination[i]))
      {
        count++;
      }
    }
    if(count == 6)
    {
      return szIsCorrect ? 1 : 2;
    }
    if(count == 5)
    {
      return szIsCorrect ? 3 : 4;
    }
    if(count == 4)
    {
      return szIsCorrect ? 5 : 6;
    }
    if(count == 3)
    {
      return szIsCorrect ? 7 : 8;
    }
    if(count == 2 &amp;&amp; szIsCorrect)
    {
      return 9;
    }
    
    return -1;
  }
}

答案3:

using System;
using System.Linq;
using System.Collections.Generic;

public class LOTTO
{
    public static int[] NumberGenerator()
    {
        var rnd = new Random(DateTime.Now.Millisecond);
        int randomNumber;
        List<int> numbers = new List<int>(7);
        for (int i = 0; i < 6; i++)
        {
            while (numbers.Contains(randomNumber = rnd.Next(1, 50))) ;
            numbers.Add(randomNumber);
        }
        return numbers.OrderBy(n => n).Append(rnd.Next(0, 10)).ToArray();
        
    }

    public static int CheckForWinningCategory(int[] checkCombination, int[] winningCombination)
    {
        bool superZahlMatch = checkCombination[6] == winningCombination[6];
        int matches = checkCombination.Take(6).Intersect(winningCombination.Take(6)).Count();
        switch (matches)
        {
            case 6 : return superZahlMatch ? 1 : 2;
            case 5: return superZahlMatch ? 3 : 4;
            case 4: return superZahlMatch ? 5 : 6;
            case 3: return superZahlMatch ? 7 : 8;
            case 2: return superZahlMatch ? 9 : -1;
            default: return -1;
        }
    }
}

答案4:

using System;
using System.Collections.Generic;
using System.Linq;
public class LOTTO
    {
        public static int CheckForWinningCategory(int[] checkCombination, int[] winningCombination)
        {
            var amountnumbersmatch = 0;
            var superzahlmatch = checkCombination[6] == winningCombination[6];

            for (int i = 0; i < 6; i++)
            {
                if (winningCombination.Contains(checkCombination[i]))
                {
                    amountnumbersmatch++;
                }
            }

            if (superzahlmatch)
            {
                if (amountnumbersmatch == 6) return 1;
                if (amountnumbersmatch == 5) return 3;
                if (amountnumbersmatch == 4) return 5;
                if (amountnumbersmatch == 3) return 7;
                if (amountnumbersmatch == 2) return 9;
            }
            else
            {
                if (amountnumbersmatch == 6) return 2;
                if (amountnumbersmatch == 5) return 4;
                if (amountnumbersmatch == 4) return 6;
                if (amountnumbersmatch == 3) return 8;
            }

            return -1;

        }

        public static int[] NumberGenerator()
        {
            var numbers = new int[7];
            var rand = new Random();
            var check = new HashSet<int>();

            for (var i = 0; i < 6; i++)
            {
                var curValue = rand.Next(1, 50);
                if (i == 0)
                {
                    curValue = rand.Next(1, 50);
                }
                while (check.Contains(curValue))
                {
                    curValue = rand.Next(1, 50);
                }
                numbers[i] = curValue;
                check.Add(curValue);
            }

            Array.Sort(numbers, 0, 6);

            numbers[6] = rand.Next(0, 10);

            return numbers;
        }
    }

答案5:

using System;
using System.Linq;

    public class LOTTO
    {
        public static int[] NumberGenerator()
        {
            var sixOf49 = new int[6];

            while (sixOf49[5] == 0)
            {
                var oneOfThem = new Random((int)DateTime.Now.Ticks &amp; 0x0000FFFF).Next(1, 50);

                if (sixOf49.Where(x => x.Equals(oneOfThem)).Any())
                {
                    continue;
                }

                for (var i = 0; i < 6; i++)
                {
                    if (sixOf49[i] == 0)
                    {
                        sixOf49[i] = oneOfThem;
                        break;
                    }
                }
            }

            Array.Sort(sixOf49);
            Array.Resize(ref sixOf49, 7);

            sixOf49[6] = (new Random((int)DateTime.Now.Ticks &amp; 0x0000FFFF)).Next(0, 10);

            return sixOf49;
        }

        public static int CheckForWinningCategory(int[] checkCombination, int[] winningCombination)
        {
            var check = checkCombination.Take(6).ToArray();
            var win = winningCombination.Take(6).ToArray();

            var count = win.Where(number => check.Where(x => x.Equals(number)).Count() != 0).Aggregate(14, (current, number) => current - 2);

            /*// long variant, which replaced linq-chain
            var count = 14;

            foreach (int number in win)
            {
                if (check.Where(x => x.Equals(number)).Count() != 0)
                {
                    count -= 2;
                }
            }
            */

            if (checkCombination[6].Equals(winningCombination[6])) count--;

            if (count > 9) count = -1;

            return count;
        }
    }

答案6:

using System;
using System.Collections.Generic;
using System.Linq;

public class LOTTO
{
    private static Random random = new Random();

    public static int[] NumberGenerator()
    {
        List<int> randomNumbers = new List<int>();
        
        for(int i = 0; i < 6; i++)
        {
            int randomNumber = 0;
            do
            {
                randomNumber = random.Next(1, 50);
            } while(randomNumbers.Contains(randomNumber));
            
            randomNumbers.Add(randomNumber);
        }
        
        randomNumbers.Sort();
        
        randomNumbers.Add(random.Next(0, 10));
        
        return randomNumbers.ToArray();
    }
    
    public static int CheckForWinningCategory(int[] checkCombination, int[] winningCombination)
    {
        var winningNumbers = winningCombination.Take(6);

        int matchNumber = Enumerable.Range(0, 6).Count(i => winningNumbers.Contains(checkCombination[i]));
        bool isSuperNumberMatch = checkCombination.Last() == winningCombination.Last();
        
        switch(matchNumber)
        {
            case 2:
                if (isSuperNumberMatch)
                {
                    return 9;
                }
                
                break;
            
            case 3:
                if (isSuperNumberMatch)
                {
                    return 7;
                }
                
                return 8;
            
            case 4:
                if (isSuperNumberMatch)
                {
                    return 5;
                }
                
                return 6;
            
            case 5:
                if (isSuperNumberMatch)
                {
                    return 3;
                }
                
                return 4;
            
            case 6:
                if (isSuperNumberMatch)
                {
                    return 1;
                }
                
                return 2;
            
            default:
                break;
        };
        
        return -1;
    }
}

答案7:

using System;

public class LOTTO
{
  public static int[] NumberGenerator()
  {
    int[] arrayNumeros = new int[50]; //From 1 to 49.
    int[] arrayTemp = new int[6];
    int[] arrayFinal = new int[7];
    int numero = 0;
    int alea = 0;
  
    for (int intI = 0; intI <= 49; intI++) arrayNumeros[intI] = intI;
    Random rnd = new Random();
    for (int intI = 0; intI < 6; intI++)
    {
        numero = rnd.Next(1, 49); //between 1 and 49.
        alea = arrayNumeros[intI];
        arrayNumeros[intI] = arrayNumeros[numero];
        arrayNumeros[numero] = alea;
    }
    
    for (int intI = 0; intI < 6; intI++) arrayTemp[intI]=arrayNumeros[intI];
    Array.Sort(arrayTemp);
    
    for (int intI = 0; intI < 6; intI++) arrayFinal[intI]=arrayTemp[intI];
    arrayFinal[6]=rnd.Next(0, 10); //between 0 and 9.
    
    return arrayFinal;
  }
  
  public static int CheckForWinningCategory(int[] checkCombination, int[] winningCombination)
  {
    int premios6 = 0;
    for (int intCombi = 0; intCombi <= 5; intCombi++)
    {
        for (int intI = 0; intI <= 5; intI++)
        {
            if (checkCombination[intCombi] == winningCombination[intI])
            {
                premios6++;
                break;
            }
        }
    }
    bool Superzahl = false;
    if (checkCombination[6] == winningCombination[6]) Superzahl = true;
    switch(premios6)
    {
      case 6:
          if (Superzahl) return 1;
          else return 2;
          break;
      case 5:
          if (Superzahl) return 3;
          else return 4;
          break;
      case 4:
          if (Superzahl) return 5;
          else return 6;
          break;
      case 3:
          if (Superzahl) return 7;
          else return 8;
          break;
      case 2:
          if (Superzahl) return 9;
          break;
    }
  
    return -1;
  }
}

答案8:

using System;
using System.Linq;

public class LOTTO {

    private static int[] _numbers1 = Enumerable.Range( 1, 49 ).ToArray( );

    private static int[] _numbers2 = Enumerable.Range( 0, 10 ).ToArray( );

    public static int[] NumberGenerator( ) {
        Shuffle( _numbers1 );
        Shuffle( _numbers2 );
        return _numbers1.Take( 6 ).OrderBy( _ => _ ).Concat( new[] {_numbers2 [ 0 ]} ).ToArray( );
    }

    public static int CheckForWinningCategory( int[] checkCombination, int[] winningCombination ) {
        var n = winningCombination.Length;
        if ( checkCombination.Length != n ) {
            return -1;
        }
        var matches = CountMatches( checkCombination, winningCombination );
        var superzahlMatch = checkCombination [ n - 1 ] == winningCombination [ n - 1 ];
        switch ( matches ) {
            case 6:
                return superzahlMatch ? 1 : 2;
            case 5:
                return superzahlMatch ? 3 : 4;
            case 4:
                return superzahlMatch ? 5 : 6;
            case 3:
                return superzahlMatch ? 7 : 8;
            case 2:
                return superzahlMatch ? 9 : -1;
            default:
                return -1;
        }
    }

    private static int CountMatches( int[] checkCombination, int[] winningCombination ) {
        var matches = 0;
        for ( int i = 0; i < winningCombination.Length - 1; i++ ) {
            for ( int j = 0; j < checkCombination.Length - 1; j++ ) {
                if ( checkCombination [ j ] == winningCombination [ i ] ) {
                    matches += 1;
                }
            }
        }
        return matches;
    }

    private static void Shuffle( int[] array ) {
        var random = new Random( );
        for ( int i = 0; i < array.Length; i++ ) {
            var j = i + random.Next( array.Length - i );
            var t = array [ j ];
            array [ j ] = array [ i ];
            array [ i ] = t;
        }
    }

}

答案9:

using System;
using System.Linq;
    public class LOTTO
    {
        public static int[] NumberGenerator()
        {
            int[] res = new int[] { -1, -1, -1, -1, -1, -1, 50 };
            for(int i = 0; i < 6; i++)
            {
                int temp = new Random().Next(1, 50);
                if (res.Any(x => x == temp)) i--;
                else res[i] = temp;
            }
            res = res.OrderBy(x => x).ToArray();
            res[6] = new Random().Next(0, 10);
            return res;
        }

        public static int CheckForWinningCategory(int[] checkCombination, int[] winningCombination)
        {
            int res = 0;
            int[] temp = winningCombination.Take(6).ToArray();
            for(int i = 0; i < 6; i++)
            {
                if (temp.Any(x => x == checkCombination[i])) res++;
            }
            int bonus = 0;
            if (winningCombination[6] == checkCombination[6]) bonus++;
            if (res > 2) res = (7 - res) * 2 - bonus;
            else return -1;
            return res;
        }
    }

答案10:

using System;
using System.Collections.Generic;
public class LOTTO
{
        public static int[] NumberGenerator()
        {
            var random = new Random();
            var list = new List<int>();
            while (list.Count<6)
            {
                var r = random.Next(1, 50);
                if(!list.Contains(r)) list.Add(r);
            }
            list.Sort();
            list.Add(random.Next(0,10));
            return list.ToArray();
        }

        public static int CheckForWinningCategory(int[] checkCombination, int[] winningCombination)
        {
            var count = 0;
            for (int i = 0; i < checkCombination.Length-1; i++)
                if (Array.BinarySearch(winningCombination, 0, winningCombination.Length - 1, checkCombination[i]) >= 0) count++;
            
            var s = checkCombination[checkCombination.Length - 1] == winningCombination[winningCombination.Length - 1]?-1:0;
            switch (count)
            {
                case 6: return 2 + s;
                case 5: return 4 + s;
                case 4: return 6 + s;
                case 3: return 8 + s;
                case 2: if (s == -1) return 9;break;
            }
            return -1;
        }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值