【解決方法】雄牛と雌牛のゲーム桁の位置を決定するにはどうすればよいですか?


牛と牛のゲームのロジックを実装するためのコードは次のとおりです。

Bulls and Cows は 2 人用のゲームです。 コンピューターが数字を考え、他のプレイヤーがそれを推測しようとします。

推測する数字は 4 桁の数字である必要があり、1 ~ 9 と 1000 ~ 9999 の数字のみを使用し、各数字を 1 回ずつ使用してください。 たとえば、1234 は有効、0123 は無効、9877 は無効、9876 は有効です。

プレーヤーが推測するたびに、雄牛の数と牛の数という 2 つの値が得られます。

1 ブルは、推測に含まれる数字とターゲット番号に 1 桁の共通点があり、正しい位置にあることを意味します。
1 頭の牛は、推測とターゲットに共通の数字が 1 つあることを意味しますが、正しい位置ではありません。
目標を 1234 とします。4321 と推測すると、雄牛は 0 頭、牛は 4 頭になります。 3241 は雄牛 1 頭と牛 3 頭を与えます

試してみると、間違った出力が得られます。

Enter a Number : 
3054
Number Generated by Computer: 2441
Input was : 3054
0 bulls and 2 cows

牛は2頭ではなく1頭であるべきです。

コードの何が間違っているのでしょうか?どうすれば修正できますか? 正確な答えを得るには、条件ステートメントにどのような変更を加える必要がありますか? 提案してください

私が試したこと:

import java.util.*;
public class Bulls_Cows
{
    int num,bulls,cows,random_int,temp,temp_rand,temp1_rand;
    static int digit[] = new int[4];
    static int digit_rand[] = new int[4];
    public void input()
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a Number : ");
        num = sc.nextInt();
    }
    
    public void checkBullorCow()
    {
        temp = num;
        random_int = (int)(Math.random()*9000+1000);
        temp_rand = random_int;
        temp1_rand = random_int;
        for(int i=0;i<4;i++)
        {
            digit[i]=temp/(int)Math.pow(10,i)%10;
            digit_rand[i]=temp_rand/(int)Math.pow(10,i)%10;
        }
        
        for (int j = 0; j < digit.length; j++) 
        {
          if (digit[j] == digit_rand[j]) 
            bulls++;
        
        for (int k = 0; k < digit_rand.length; k++) 
        {
          if (k!=j&&digit[j]==digit_rand[k]) 
            cows++;
        }
        }   
    }
    
    public void output()
    {
        System.out.println("Number Generated by Computer: "+temp1_rand);
        System.out.println("Input was : "+num);
        System.out.println(bulls+" bulls and "+cows+" cows");
    }
    //Main method 
    public static void main()
    {
      Bulls_Cows ob = new Bulls_Cows();
      ob.input();
      ob.checkBullorCow();
      ob.output();
    }
}

解決策 1

まず、手動でそれを行う方法を考えてみましょう。ターゲットのコピーを作成し、次に、ターゲットのコピーを数えて、一致しない値に置き換えることで、ターゲットのコピーからすべての雄牛を削除します。 これを行わないと、ターゲットが 1234 で推測が 5226 の場合、2 番目の 2 つがすでに見つかった雄牛と一致するため、1 頭の雄牛と 1 頭の雌牛が識別されます。

次に、牛をチェックして数え、1234 で 4456 が推測される 2 頭の牛が見つからないように、一致する値を再度削除します。

これは次の場合に役立ちます。 問題を解決するコードの書き方、初心者ガイド[^]

コメント

タイトルとURLをコピーしました