Задача 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();
}
}
Няма коментари:
Публикуване на коментар