zoukankan      html  css  js  c++  java
  • 猜数字的算法的一个简单实现

    猜数字的算法的一个简单实现,用的最简单的算法,权当编程练习。

     1     class GuessNumber
     2     {
     3         public static IEnumerable<int> Guess(Func<intint> testHanlder)
     4         {
     5             var validNumers = Enumerable.Range(19);    //有效数字范围为1-9
     6             var candicateNum = from n1 in validNumers
     7                                from n2 in validNumers
     8                                from n3 in validNumers
     9                                from n4 in validNumers
    10                                where new int[] { n1, n2, n3, n4 }.Distinct().Count() == 4    //过滤掉有重复的数字
    11                                select n1 * 1000 + n2 * 100 + n3 * 10 + n4;
    12 
    13             while (true)
    14             {
    15                 var num = candicateNum.First();
    16                 yield return num;
    17 
    18                 var result = testHanlder(num);
    19                 if (result == 40)
    20                     yield break;
    21 
    22                 candicateNum = candicateNum.Where(i => Test(i, num) == result);
    23             }
    24         }
    25 
    26         public static IEnumerable<int> Guess(int num)
    27         {
    28             return Guess(i => Test(i, num));
    29         }
    30         
    31         //为了简单返回值为int型,如2A1B则返回21
    32         public static int Test(int num1, int num2)
    33         {
    34             var value1 = num1.ToString("0000");
    35             var value2 = num2.ToString("0000");
    36 
    37             Contract.Assume((value1.Length == 4) && (value2.Length == 4));
    38 
    39             var query = value1.Zip(value2, (ch1, ch2) => new 
    40                                     {
    41                                         MatchA = (ch1 == ch2),
    42                                         MatchB = (ch1 != ch2) && (value1.Contains(ch2))
    43                                     }).ToArray();
    44 
    45             var aCount = query.Count(i => i.MatchA);
    46             var bCount = query.Count(i => i.MatchB);
    47 
    48             return aCount * 10 + bCount;
    49         }
    50     }
  • 相关阅读:
    桟错误分析方法
    gstreamer调试命令
    sqlite的事务和锁,很透彻的讲解 【转】
    严重: Exception starting filter struts2 java.lang.NullPointerException (转载)
    eclipse 快捷键
    POJ 1099 Square Ice
    HDU 1013 Digital Roots
    HDU 1087 Super Jumping! Jumping! Jumping!(动态规划)
    HDU 1159 Common Subsequence
    HDU 1069 Monkey and Banana(动态规划)
  • 原文地址:https://www.cnblogs.com/TianFang/p/2229562.html
Copyright © 2011-2022 走看看