Задача 2
Задача 3
Задача 4
Задача 5
Здравейте,
Благодаря за търпението и че сте стигнали до 3-та задача.
Ето и впечатленията ми.
Условието на задачата може да изтеглите от тук: 3. Bulls and Cows.doc
На пръв поглед нищо сложно. Завъртях 4 вложени цикъла и проверявах за всеки получен вариант дали сравнено с secret се получава търсения брой бикове и крави. Бързо се видя че в отговорите не участва цифрата 0. Проблема дойде от алгоритъма за проверка колко бика и крави има. При положение че има повторение на цифрите се получават няколко варианта за броене, една и съща цифра, която се среща няколко пъти, колко пъти ще се брои. Но в крайна сметка намерих желания вариант и се получи.
Важно е след като се преброи дадена цифра да не може повторно да се брои. И първо да се преброят биковете.
Ето и моето решение (като изтрих CheckBullsAndCows - това е първия вариант на функцията):
using System; using System.Collections.Generic; class BullsAndCows { static bool CheckBullsAndCows2(int sd1, int sd2, int sd3, int sd4, int d1, int d2, int d3, int d4, int bulls, int cows) { int newBulls = 0; int newCows = 0; if (sd1 == d1) { newBulls++; sd1 = -2; d1 = -1; } if (sd2 == d2) { newBulls++; sd2 = -2; d2 = -1; } if (sd3 == d3) { newBulls++; sd3 = -2; d3 = -1; } if (sd4 == d4) { newBulls++; sd4 = -2; d4 = -1; } //sd1 if (sd1 >= 0) { bool hasCow = false; if (sd1 == d2) { hasCow = true; d2 = -1; } if (sd1 == d3) { hasCow = true; d3 = -1; } if (sd1 == d4) { hasCow = true; d4 = -1; } if (hasCow) { newCows++; } } //sd2 if (sd2 >= 0) { bool hasCow = false; if (sd2 == d1) { hasCow = true; d1 = -1; } if (sd2 == d3) { hasCow = true; d3 = -1; } if (sd2 == d4) { hasCow = true; d4 = -1; } if (hasCow) { newCows++; } } //sd3 if (sd3 >= 0) { bool hasCow = false; if (sd3 == d1) { hasCow = true; d1 = -1; } if (sd3 == d2) { hasCow = true; d2 = -1; } if (sd3 == d4) { hasCow = true; d4 = -1; } if (hasCow) { newCows++; } } //sd4 if (sd4 >= 0) { bool hasCow = false; if (sd4 == d1) { hasCow = true; d1 = -1; } if (sd4 == d2) { hasCow = true; d2 = -1; } if (sd4 == d3) { hasCow = true; d3 = -1; } if (hasCow) { newCows++; } } return ((bulls == newBulls) && (cows == newCows)); } static void Main() { string secretNumber = Console.ReadLine(); int[] secretDigits = new int[4]; for (int i = 0; i < 4; i++) { secretDigits[i] = secretNumber[i] - '0'; } int bulls = int.Parse(Console.ReadLine()); int cows = int.Parse(Console.ReadLine()); bool hasAtLeastOnePrinted = false; for (int digit1 = 1; digit1 < 10; digit1++) { for (int digit2 = 1; digit2 < 10; digit2++) { for (int digit3 = 1; digit3 < 10; digit3++) { for (int digit4 = 1; digit4 < 10; digit4++) { if (CheckBullsAndCows2(secretDigits[0], secretDigits[1], secretDigits[2], secretDigits[3], digit1, digit2, digit3, digit4, bulls, cows)) { if (hasAtLeastOnePrinted) { Console.Write(" {0}{1}{2}{3}", digit1, digit2, digit3, digit4); } else { Console.Write("{0}{1}{2}{3}", digit1, digit2, digit3, digit4); hasAtLeastOnePrinted = true; } } } } } } if (!hasAtLeastOnePrinted) { Console.Write("No"); } Console.WriteLine(); } }
Няма коментари:
Публикуване на коментар