Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220

Инверсия диапазона

26.02.2014, 12:27. Показов 2262. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Задача вроде не сложная, но что-то я, похоже, немного туплю =)

Суть такова:

Есть конечный набор некоторых элементов, например страниц, допустим всего 10 элементов.
Пользователь указывает некоторый диапазон (строку), например 5, 8-10 (может быть любое количество запятых и тире, номера идут по порядку, подмножества не пересекаются, то есть можно исключить всякие проверки).
В этот диапазон входят элементы № 5, 8, 9, 10.
Надо получить диапазон, в который эти элементы не входят (строку): 1-4, 6-7.
Очень желательно при этом использовать средства общие для большинства языков (циклы, массивы, но не LINQ и специфичные коллекции), но не критично.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.02.2014, 12:27
Ответы с готовыми решениями:

Побитная инверсия
Здравствуйте Есть вопросик, но с начало расскажу в чем проблемка ) Есть строка, вот такая: 10101010 Как инвертировать? Чтобы было...

Инверсия строки
Из файла получаю строку как ее можно инвертировать с помощью побитовой инверсии? зарание Спасибо

Инверсия регистра
Из больших букв - маленькие Из маленьких - большие Пример: Привет, Андрей пРИВЕТ, аНДРЕЙ Инверсия регистра мне нужна

7
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 13:03
xoraxax,
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Main()
        {
            int max = 10;
            string s = "5, 8-10";
            var forbidden = ParseString(s);
            Console.WriteLine("Forbidden");
            foreach (int x in forbidden)
            {
                Console.Write("{0} ", x);
            }
 
            Console.WriteLine("{0}{0}{0}Result", Environment.NewLine);
            for (int i = 0; i < max; i++)
            {
                if (!forbidden.Contains(i))
                    Console.Write("{0} ", i);
            }
            Console.ReadKey();
        }
 
        private static HashSet<int> ParseString(string input)
        {
            var split = input.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries);
            var result = new HashSet<int>();
 
            foreach (string s in split)
            {
                int x;
                if (int.TryParse(s, out x))
                    result.Add(x);
                else
                {
                    int index = s.IndexOf('-');
                    if (index < 0)
                        throw new ArgumentException();
                    int a = int.Parse(s.Remove(index));
                    int b = int.Parse(s.Substring(index + 1));
                    for (int i = Math.Min(a, b); i <= Math.Max(a, b); i++)
                        result.Add(i);
                }
            }
            return result;
        }
    }
}
1
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
26.02.2014, 13:17  [ТС]
Парсить диапазон и определять входит туда элемент или нет я уже умею =)
Проблема в том, как получить на выходе короткую запись. То есть не 1 2 3 4 5, а 1-5.
0
 Аватар для Дмитрий3241
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
Записей в блоге: 6
26.02.2014, 14:03
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

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
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication2
{   
    class Program
    {
        static void Main( string[] args )
        {
            foreach ( var s in foo( new int[] { 1, 3, 5, 7, 9, 10, 11, 12, 13, 15, 17, 20 } ) )
                Console.Write( s );
        }
 
        static IEnumerable<string> foo( int[] args )
        {
            int begin = args[0];
            int end = args[0];
 
            for ( int i = 1; i < args.Length; i++ )
            {
                if ( args[i] - end == 1 )
                {
                    end = args[i];
                }
                else
                {
                    if ( end - begin > 1 ) yield return string.Format( "({0} - {1}), ", begin, end );
                    else yield return string.Format( "{0}, ", begin );
 
                    begin = end = args[i];
                }
            }
 
            if ( begin != end ) yield return string.Format( "({0} - {1}), ", begin, end );
            else yield return end.ToString();
        }
    }
}
Bash
1
1, 3, 5, 7, (9 - 13), 15, 17, 20
Код кривоватый, но все же работает...
1
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
26.02.2014, 14:09  [ТС]
Подходит. Спасибо большое.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 14:38
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        private static string BackToString(IList<int> allowed)
        {
            int lastSequenceNum = allowed[0];
            var sb = new StringBuilder(allowed.Count*2)
                .Append(lastSequenceNum).Append('-');
            bool sequenceStart = true;
            for (int i = 1; i < allowed.Count; i++)
            {
                if (allowed[i] == allowed[i - 1] + 1)
                {
                    if (!sequenceStart)
                    {
                        sb.Append(allowed[i - 1]).Append('-');
                        sequenceStart = true;
                    }
                    lastSequenceNum = allowed[i];
                    continue;
                }
                sequenceStart = false;
                sb.Append(lastSequenceNum).Append(", ");
            }
            return sb.Append(lastSequenceNum).ToString();
        }
Добавлено через 27 секунд
Дмитрий3241, не пойму, у меня еще более криво или что?
0
 Аватар для Дмитрий3241
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
Записей в блоге: 6
26.02.2014, 14:48
Цитата Сообщение от Psilon Посмотреть сообщение
Дмитрий3241, не пойму, у меня еще более криво или что?
Я кривость своего кода интуитивно оцениваю... Написал, посмотрел, не понравилось значит криво, можно сделать лучше...

Добавлено через 6 минут
Psilon,
C#
1
Console.WriteLine( BackToString( new List<int>() { 1, 3, 5, 6, 7, 9, 12 } ) );
Bash
1
1-1, 1, 5-7, 7, 7
Что то, где то вы напутали...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 15:55
Дмитрий3241, ладно, фиг с ним, ваш вариант примем за эталон
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2014, 15:55
Помогаю со студенческими работами здесь

Инверсия массива
Объясните пожалуйста, какой из этих вариантов более рациональный , и почему? второй сам придумал, а первый мне показался более сложным...

Инверсия int
Может заголовок немного не так объяснять то что мне нужно сделать. Короче! foreach (var state in data) { ...

Фильтр для изображения. Инверсия
Будьте добры можете дописать программу на си шарп с использование, так как не нашел на другом языке фильтр код. А так в общем не успел...

Инверсия строки и сложение чисел
доброго всем времени суток. прошу помочь с обьяснением двух функций, как они работают private static int Sum(int a, int b) { ...

Инверсия массива (исправить код)
Доброго времени суток, попытался инвертировать массив, без revers'а. Получилось следующее: using System; class LengthDemo { ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru