[ad_1]
牛と牛のゲームのロジックを実装するためのコードは次のとおりです。
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 頭の牛が見つからないように、一致する値を再度削除します。
これは次の場合に役立ちます。 問題を解決するコードの書き方、初心者ガイド[^]
[ad_2]
コメント