首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >牛和牛的游戏?

牛和牛的游戏?
EN

Stack Overflow用户
提问于 2014-02-08 01:48:55
回答 3查看 1.6K关注 0票数 0

对于那些不熟悉的人,该游戏是一个数字猜测游戏,其中选择一个数字(不重复;例如,不选择1223 ),用户进行猜测并获得信息:数字和数字是正确的,数字是正确的,但数字是错误的,还是数字不包含。cows

(例如选择=> 1234,猜3789就能得到1头牛)

而不是计算机选择数字,告诉属性和播放器猜测,我想做相反的;我输入一个数字和属性-计算机给出一个可能的数字列表。

不管怎样,我的方法是:

  1. 将不重复的所有数字添加到数组列表中。
  2. 删除不满足条件的数字。

以下是奶牛病例的处理方法:

代码语言:javascript
复制
     //Case 5: property is 4 cows;
     if (property.equals("040")) {
        //delete if numbers don't appear EXACTLY 4 times
        if (contains != 4) { numbers.remove(i); }

        //removes if the digits of the number tried corresponds with the actual number (Cow!)
        else if (n.charAt(0) == first.charAt(0)) { numbers.remove(i); }
        else if (n.charAt(1) == second.charAt(0)) { numbers.remove(i); }
        else if (n.charAt(2) == third.charAt(0)) { numbers.remove(i); }
        else if (n.charAt(3) == fourth.charAt(0)) { numbers.remove(i); }
     }

它适用于奶牛。在尝试实现多头时,似乎不可能使用这种方法。,我怎么能为公牛做一个方法呢!?我需要再创建四个数组并计算每个案例吗?或者ArrayList不是该走的路吗?

例如,使用1bull的1234表示要猜测的数字是1XXX、X2XX、XX3X或XXX4,但我不能使用这种方法,因为它将删除除输入之外的所有数字。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-08 02:46:16

你可以试试这个算法来解决-

代码语言:javascript
复制
String userAnswer = // ... getUserAnswer();        
if(userAnswer == null || userAnswer.equals("")
        || !userAnswer.matches("^-?\\d+$") 
            || userAnswer.split("(?<=\\G.{1})").length < 4) {
    // error    
}                

int[] secret = (int[])// ... getSecret(request);        
int[] seq = {1,2,3,4};

for(int i = 0; i < userAnswer.split("(?<=\\G.{1})").length; i++) {
    seq[i] = Integer.parseInt(s[i]);
}

int bullCount = 0;
int cowCount = 0;

for(int i = -1; ++i < secret.length;) {
  if(secret[i] == seq[i]) {
    bullCount++;
  }
}

for(int i = -1; ++i < secret.length;) {
  for(int j = -1; ++j < secret.length;) {
    if(secret[i] == seq[j] && i != j) {
      cowCount++;
    }
  }
}

String snswer = bullCount + "b" + cowCount +  "c";            
if(Arrays.equals(secret, seq))
 // win! 
else
// fail!
票数 1
EN

Stack Overflow用户

发布于 2015-02-24 15:57:49

这是错误的,如果代码是1634,用户输入6113,程序返回4母牛时,实际上有3。

票数 0
EN

Stack Overflow用户

发布于 2019-04-12 01:58:04

试试这个:

代码语言:javascript
复制
    private static String findNumberOfCowsAndBulls(String firstString, String secondString) {

    if(firstString.equals(secondString))
        return "All Bulls:" + firstString.length();

    char[] fSArr = firstString.toCharArray();
    char[] sSArr = secondString.toCharArray();
    int countCow = 0;
    int countBull = 0;
    Map<String, Integer> fSMap = new HashMap<>();
    Map<String, Integer> sSMap = new HashMap<>();

    for (int i = 0; i < fSArr.length; i++) {
        if(i < sSArr.length){
            if(fSArr[i] == sSArr[i]){
                countBull++;
            }
            else{
                updateMapOfCharsCount(fSMap, fSArr[i]);
                updateMapOfCharsCount(sSMap, sSArr[i]);
            }
        }
        else{  //fSArr is bigger than sSArr
            updateMapOfCharsCount(fSMap, fSArr[i]);
        }
    }

    if(fSArr.length < sSArr.length){  //fSArr is shorter than sSArr
        for(int i = fSArr.length; i < sSArr.length - fSArr.length; i++){
            updateMapOfCharsCount(sSMap, sSArr[i]);
        }
    }

    for (Map.Entry<String, Integer> entry : fSMap.entrySet()) {
        String key = entry.getKey();
        if(sSMap.containsKey(key)){
            if(sSMap.get(key) <= fSMap.get(key))
                countCow = countCow + sSMap.get(key);
            else
                countCow = countCow + fSMap.get(key);
        }
    }

    return "countCow = " + countCow + " countBull = " + countBull;
}

private static void updateMapOfCharsCount(Map<String, Integer> fsMap, char c) {
    String key1 = String.valueOf(c);
    if (fsMap.containsKey(key1)) {
        fsMap.put(key1, fsMap.get(key1) + 1);
    } else
        fsMap.put(key1, 1);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21640881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档