25 / 25 / 22
Регистрация: 22.02.2015
Сообщений: 125
1

Поиск угаданных цифр в числе

05.07.2015, 20:54. Показов 1965. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, не могу реализовать алгоритм поиска угаданных цифр числа. Ситуация следующая: есть два массива, одинаковой размерности, в этих массивах находятся два числа, разложенных на ячейки. Нужно определить сколько цифр во втором массиве содержатся и в первом.
Пример: первый массив содержит число 5161, то есть массив из четырех ячеек в каждой из которых содержится по одной цифре, если во втором массиве содержится число 1394, то моя программа выдавала, что "угаданных" чисел из первого массива 2, хотя на самом деле, "угаданная" цифра лишь одна. То есть проблема в следующем: если в первом массиве содержится цифра, встречающаяся несколько раз, а во втором массиве указана лишь одна цифра из этих встречающихся, то программа считает, что указаны все эти цифры. Знаю, объяснение сумбурное, но, надеюсь, на примере это выглядит понятно)
Если кто-то реализовывал данный или похожий алгоритм, или знает как его реализовать - поделитесь, пожалуйста, буду очень благодарен помощи и любым идеям)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2015, 20:54
Ответы с готовыми решениями:

Вывести количество цифр в числе и сумму этих цифр
Натуральное число A, А<100, написать программу которая выводит количество цифр в этом числе и сумму...

Обнуление цифр в числе
Доброго времени суток, у меня такой вопрос, допустим я в некую переменную ложу некое число, к...

Перестановка цифр числе
Ребят, помогите пожалуйста: Даны k (k > 1) натуральных n. Выбросить из записи числа n цифры 0 и 2,...

Посчитать количество цифр в числе
Помогите не могу никак разобратся! нужно сщздать прогу. Пользователь вводит с клавиатуры число...

12
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
05.07.2015, 22:56 2
Лучший ответ Сообщение было отмечено Legend072 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        /// <param name="numbers">Числа, которые нужно угадать</param>
        /// <param name="userNumbers">Числа, названные угадывающим</param>
        static int Guessed(int[] numbers, int[] userNumbers)
        {
            var numList = numbers.ToList();
            int count = 0;
            foreach (var item in userNumbers)
            {
                if (numList.Contains(item))
                {
                    count++;
                    numList.Remove(item);
                }
            }
            return count;
        }
2
Эксперт .NET
1693 / 1322 / 316
Регистрация: 15.06.2012
Сообщений: 5,034
Записей в блоге: 3
06.07.2015, 04:11 3
вопрос по ТЗ: вводим именно 4 цифрьі, или можем ввести и меньше/больше? Нужно угадьівать именно саму цифру, или и ее позицию?

А вообще:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        /// <summary>
        /// 
        /// </summary>
        /// <param name="source">Загаданое число</param>
        /// <param name="entered">Введеньіе цифрьі пользователем</param>
        /// <returns>Возращает угаданое количество цифр.</returns>
        public static int SearchEquals(int source, int entered)
        {
            // счетчик
            var result = 0;
            //конвертим в строку
            var s = new StringBuilder(Math.Abs(source).ToString());
            var e = Math.Abs(entered).ToString();
            // проходим все введеньіе цифрьі
            foreach (var ch in e)
            {
                var p = s.ToString().IndexOf(ch);
                // если нашло в исходной строке введеную цифру
                if (p > -1)
                {
                    // удаляем из исходной строки, чтобьі больше не находило по ней совпадений
                    s.Remove(p, 1);
                    // увеличиваем счетчик
                    result++;
                }
            }
            return result;
        }
1
25 / 25 / 22
Регистрация: 22.02.2015
Сообщений: 125
06.07.2015, 10:25  [ТС] 4
В программе пользователь сам выбирает разрядность числа, следовательно, количество вводимых цифр зависит от выбранной пользователем разрядности. Нужно угадать именно саму цифру, у меня не работает только этот блок. Позицию цифры программа определяет верно.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.07.2015, 10:41 5
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static int Guessed(int a, int b)
{
    var hsa = new HashSet<int>();
    while (a != 0)
    {
        hsa.Add(a%10);
        a /= 10;
    }
    var hsb = new HashSet<int>();
    while (b != 0)
    {
        hsb.Add(b%10);
        b /= 10;
    }
    hsa.IntersectWith(hsb);
    return hsa.Count;
}
Добавлено через 1 минуту
без копипаста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        static int Guessed(int a, int b)
        {
            var hsa = GetDigitsSet(a);
            var hsb = GetDigitsSet(b);
            hsa.IntersectWith(hsb);
            return hsa.Count;
        }
 
        private static HashSet<int> GetDigitsSet(int a)
        {
            var set = new HashSet<int>();
            while (a != 0)
            {
                set.Add(a%10);
                a /= 10;
            }
            return set;
        }
Добавлено через 10 секунд
C#
1
2
3
4
5
6
7
        static void Main(string[] args)
        {
            int a = 5161;
            int b = 1394;
 
            Console.WriteLine(Guessed(a, b));
        }
1
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,986
Записей в блоге: 43
06.07.2015, 10:50 6
А чем задача отличается о того, что делает функция Intersect ?
0
25 / 25 / 22
Регистрация: 22.02.2015
Сообщений: 125
06.07.2015, 17:17  [ТС] 7
Цитата Сообщение от diadiavova Посмотреть сообщение
А чем задача отличается о того, что делает функция Intersect ?
Я недавно программирую на С# и, честно говоря, впервые слышу о такой функции.
0
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,986
Записей в блоге: 43
06.07.2015, 17:21 8
Legend072, ну попробуй в действии
C#
1
2
3
            int[] a = {5,1,6,1};
            int[] b = {1,3,9,4};
            Console.WriteLine(a.Intersect(b).Count());
1
25 / 25 / 22
Регистрация: 22.02.2015
Сообщений: 125
06.07.2015, 17:58  [ТС] 9
diadiavova, Спасибо, попробую.
0
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
06.07.2015, 22:29 10
diadiavova,
Не сработает же.
Эта операция возвращает объект, который сначала перечисляет элементы последовательности по имени first, выбирая оттуда каждый элемент, который не эквивалентен предыдущему выбранному элементу
Поэтому, например, для
C#
1
2
            int[] a = { 5, 1, 6, 1 };
            int[] b = { 1, 3, 9, 1 };
выдаст 1, хотя должно быть 2. Вот так должно сработать:
C#
1
            Console.WriteLine(a.Length - a.Except(b).Count());
0
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,986
Записей в блоге: 43
06.07.2015, 22:36 11
Цитата Сообщение от Lexeq Посмотреть сообщение
выдаст 1, хотя должно быть 2.
А разве задача была не в этом?
Цитата Сообщение от Legend072 Посмотреть сообщение
Пример: первый массив содержит число 5161, то есть массив из четырех ячеек в каждой из которых содержится по одной цифре, если во втором массиве содержится число 1394, то моя программа выдавала, что "угаданных" чисел из первого массива 2, хотя на самом деле, "угаданная" цифра лишь одна.
0
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
07.07.2015, 01:50 12
Задача была, как я понял, найти количество одинаковых цифр между задуманным числом и угаданным. Для 5161 и 1319 intersect выдаст 1, хотя угаданы 2 цифры.
0
25 / 25 / 22
Регистрация: 22.02.2015
Сообщений: 125
07.07.2015, 09:19  [ТС] 13
Цитата Сообщение от Lexeq Посмотреть сообщение
Задача была, как я понял, найти количество одинаковых цифр между задуманным числом и угаданным. Для 5161 и 1319 intersect выдаст 1, хотя угаданы 2 цифры.
Lexeq прав
0
07.07.2015, 09:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2015, 09:19
Помогаю со студенческими работами здесь

Количество нечетных цифр в числе
В чем здесь может быть ошибка? Основная программа: Console.WriteLine(&quot;Введите...

Определить количество цифр в числе
Дано число К. Определить количество цифр в числе.

Определить сколько цифр в числе
Натуральное число Х, задано в режиме диалога. Определить сколько цифр в числе. Найти и напечатать...

Определить количество цифр в числе
Определить количество цифр в числе ... Например: вводишь 7890 программа выводит 4 (если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru