решил написать программу, как она работает, написано в комментариях в коде.
Проблема будет описана ниже:
/* Программа генерирует пять случайных чисел,
* Затем вводятся пять чисел с клавиатуры.
* Далее считается количество чисел на месте и не на месте.
* Если количество чисел на месте равно пяти(сгенерированные числа равны
введённым),
* То программа заканчивает работу
*/
namespace Console_password
{
class Program
{
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Green;
Random random = new Random();
int[] pass = { 1, 2, 3, 4, 5 }; //тестовые значения (закомментированные строчки ниже заполняют рандомными значениями)
//for (int i = 0; i < 4; i++)
//vs[i] = random.Next() % 10;
int[] input = { 0, 0, 0, 0, 0 }; //пустые значения для ввода
while (true)
{
Console.Write(">> ");
string[] s = Console.ReadLine().Split(' '); //
int[] a = new int[5]; // заполняем с консоли массив
for (int i = 0; i < s.Length; i++) input[i] = Int32.Parse(s[i]); //
int InPlace = 0; //цифр на месте
int OutOfPlace = 0; //цифр не на месте
bool[] nums = { false, false, false, false, false }; // номера цифр, которые на месте
for (int i = 0; i < 5; i++)
{
if (pass[i] == input[i])
{
InPlace++; //проверяем количество цифр на месте
nums[i] = true; //запоминаем позиции чисел, которые на месте
}
}
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
{
if (nums[j] == true) //проверяем количество чисел не на месте
continue; //тут логическая ошибка
if (pass[i] == input[j])
OutOfPlace++;
}
if (InPlace == 5)
{
Console.WriteLine("Доступ разрешён!");
break;
}
Console.WriteLine($"Значений на месте {InPlace}, значений не на месте {OutOfPlace}.");
}
Console.ReadKey(true);
}
}
}
А проблема в том, что если в тестовых значениях есть число 1, и в консоль ввести пять единиц, то выведет "Значений на месте 1, значений не на месте 4" Можете скопировать код и убедиться в этом сами. Я не понимаю как исправить эту проблему, обращаюсь к вам за помощью.
Если в коде есть другие ошибки или это очень плохой код, напишите, я просто не понимаю, как надо, ведь я недавно начал программирование изучать.
Если у вас числа в небольшом диапазоне, вы можете сделать так:
public static void Main (string [] args) {
const int n = 5,
m = 10; // от 0 до 9
int x = 0, // совпавшие местами
y = 0; // совпавшие но не на месте
int[] a = {1, 2, 3, 4, 5}, // загаданные числа, n штук
b = {5, 3, 4, 2, 1}, // что игрок ввел
aa = new int[m], // m это верхняя граница диапазона чисел, если от 0 до 9 то там 10
bb = new int[m];
for (int i = 0; i < n; i++) {
if (a[i] == b[i]) {
x++;
}
else {
aa[a[i]]++;
bb[b[i]]++;
}
}
for (int i = 0; i < m; i++) {
y += Math.Min(aa[i], bb[i]);
}
Console.WriteLine ($"{x} на месте {y} не на месте");
}
Я добавил инициализацию сравниваемых массивов, чтобы доказать, что все работает. Ожидаемый вывод: 0 на месте 5 не на месте
Идея в том, что мы считаем отдельно совпавшие числа и отдельно считаем сколько несовпавших нулей, единиц, двоек и т.д. в каждом числе. Потом берем минимум для каждого числа и считаем что столько чисел не на своем месте.
То есть например для данных 55571
в массиве будет 0,1,0,0,0,3,0,1,0,0
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
вот есть у меня список в xml файле, я по нему прохожусь и вывожу в textbox, но что если нужно добавить/удалить элемент в xml файле? как через код это...
Часть кода работает, при столкновении с пулей (hp1 -= damage1;), а вторая часть не работаетПодскажите, в чем ошибся?
В некотором aspnet mvc приложении (под