0 / 0 / 0
Регистрация: 29.11.2018
Сообщений: 51
1

Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв

05.11.2019, 16:26. Показов 6213. Ответов 12
Метки нет (Все метки)

Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами -- не менее одного пробела, за последним словом -- точка. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: длина слова максимальна
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2019, 16:26
Ответы с готовыми решениями:

Дана последовательность содержащая от 0 до 10 слов, в каждом из которых ...
Дана последовательность содержащая от 0 до 10 слов, в каждом из которых от 1 до 35 строчных...

Дана последовательность, содержащая от 2 до 20 слов, в каждом из которыхх...
Дана последовательность, содержащая от 2 до 20 слов, в каждом из которых от 2 до 7 латинских букв;...

Дана последовательность,содержащая от 1 до 30 слов,в каждом из которых от 1 до 5 строчных латинских букв
Дана последовательность,содержащая от 1 до 30 слов,в каждом из которых от 1 до 5 строчных латинских...

Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв
Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных...

12
872 / 551 / 291
Регистрация: 21.11.2012
Сообщений: 1,545
05.11.2019, 17:02 2
Лучший ответ Сообщение было отмечено Mariah00 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        static void Main(string[] args)
        {
            var text = "one two three four five six seven eight nine ten.";
            
            var arr = text.Split(new char[] { ' ', '.' }, StringSplitOptions.RemoveEmptyEntries);
            var max = arr.Select(x => x.Length).Max();
 
            var list = arr.Where(x => x != arr[arr.Length - 1] && x.Length == max);
 
            Console.WriteLine($"Max length is {max}");
 
            foreach (var t in list) 
                Console.WriteLine(t);
 
            Console.ReadLine();
        }
1
0 / 0 / 0
Регистрация: 29.11.2018
Сообщений: 51
05.11.2019, 17:39  [ТС] 3
если я работаю в Windows Form, то происходит вывод только 1 слова, хотя должно выводить 3. как это исправить?
0
872 / 551 / 291
Регистрация: 21.11.2012
Сообщений: 1,545
05.11.2019, 17:43 4
а как вы их выводите? код покажите, гадать не умею
0
0 / 0 / 0
Регистрация: 29.11.2018
Сообщений: 51
05.11.2019, 17:46  [ТС] 5
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void vvod2_TextChanged(object sender, EventArgs e)
        {
           var text = vvod2.Text;
        }
 
        private void z2_Click(object sender, EventArgs e)
        {
            var text = vvod2.Text;
            var arr = text.Split(new char[] { ' ', '.' });
            var max = arr.Select(x => x.Length).Max();
            var list = arr.Where(x => x != arr[arr.Length - 1] && x.Length == max);
            label4.Text="Длина самого длинного слова = " + max;
            foreach (var t in list)
                label3.Text = t;
 
            Console.ReadLine();
        }
ввожу в TextBox, при нажатии на кнопку результат выводится в Label
0
872 / 551 / 291
Регистрация: 21.11.2012
Сообщений: 1,545
05.11.2019, 17:49 6
Mariah00,

вы в цикле пытаетесь изменить текст лейбла. понятное дело оно вам будет выводить последнее найденное слово (т.к. на каждой итерации цикла вы обновляете текст лейбла), попробуйте заменить это:

C#
1
2
foreach (var t in list)
                label3.Text = t;
на это

C#
1
label3.Text = string.Join("\n", list);
1
0 / 0 / 0
Регистрация: 29.11.2018
Сообщений: 51
05.11.2019, 18:07  [ТС] 7
это помогло, спасибо

Добавлено через 16 минут
вот только ещё стоит условие, что вывод происходит слова отличного от последнего, в данном же примере это условие не выполняется
0
872 / 551 / 291
Регистрация: 21.11.2012
Сообщений: 1,545
05.11.2019, 18:32 8
вот только ещё стоит условие, что вывод происходит слова отличного от последнего, в данном же примере это условие не выполняется
var list = arr.Where(x => x != arr[arr.Length - 1] && x.Length == max);

специально проверил - все работает, условие есть
0
0 / 0 / 0
Регистрация: 29.11.2018
Сообщений: 51
05.11.2019, 19:58  [ТС] 9
если самое длинное слово похоже на последнее, то вывод вообще не происходит. например, если я ввожу: один два три четыре пять четыре, то вывод должен быть: один пять
0
872 / 551 / 291
Регистрация: 21.11.2012
Сообщений: 1,545
06.11.2019, 10:52 10
Mariah00,

в таком случае задание некорректно.

Добавлено через 11 минут
значит перед нахождением максимальной длины слова нужно выкинуть последнее и все ему подобные:

C#
1
arr = arr.Where(x => x != arr[arr.Length - 1]).ToArray();
и в строке 11 убрать условие x != arr[arr.Length - 1]

т.е. получится что-то вроде:

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
            var str = "one two three four five eleven six seven eight nine ten eleven.";
            var arr = str.Split(new char[] { ' ', '.' }, StringSplitOptions.RemoveEmptyEntries);
 
            arr = arr.Where(x => x != arr[arr.Length - 1]).ToArray();
 
            var max = arr.Select(x => x.Length).Max();
            var list = arr.Where(x => x.Length == max);
 
            foreach (var t in list)
                Console.WriteLine(t);
 
            Console.ReadLine();
1
349 / 244 / 76
Регистрация: 18.03.2016
Сообщений: 979
06.11.2019, 13:03 11
Лучший ответ Сообщение было отмечено Mariah00 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
            var str = "one two three four five eleven six seven eight nine ten eleven.";
            var arr = str.Split(new char[] { ' ', '.' }, StringSplitOptions.RemoveEmptyEntries);
 
            arr = arr.Where(x => x != arr[arr.Length - 1]).ToArray();
 
            var max = arr.Select(x => x.Length).Max();
            var list = arr.Where(x => x.Length == max);
 
            foreach (var t in list)
                Console.WriteLine(t);
 
            Console.ReadLine();
C#
1
2
3
4
5
6
7
8
9
10
            var str = "one two three four five eleven six seven eight nine ten eleven.";
            var arr = str.Split(new char[] { ' ', '.' }, StringSplitOptions.RemoveEmptyEntries);
 
            var max = arr.Max(x => x.Length);
            var list = arr.Take(arr.Length - 1).Where(x => x.Length == max);
 
            foreach (var t in list)
                Console.WriteLine(t);
 
            Console.ReadLine();
1
872 / 551 / 291
Регистрация: 21.11.2012
Сообщений: 1,545
06.11.2019, 13:51 12
jester,

у вас условие нарушено) ваш код выводит eleven,что соответствует последнему элементу

а тс, как я понял, хочет выводить все слова максимальной длины, которые не соответствуют последнему. а если таких слов нет - то вывести все слова максимальной длины оставшихся слов
0
349 / 244 / 76
Регистрация: 18.03.2016
Сообщений: 979
06.11.2019, 15:49 13
hamin,
Цитата Сообщение от Mariah00 Посмотреть сообщение
если самое длинное слово похоже на последнее, то вывод вообще не происходит. например, если я ввожу: один два три четыре пять четыре, то вывод должен быть: один пять
я подумал так не должно быть

тогда так
C#
1
2
3
4
5
6
7
8
9
10
            var str = "one two three four five eleven six seven eight nine ten eleven.";
            var arr = str.Split(new char[] { ' ', '.' }, StringSplitOptions.RemoveEmptyEntries);
 
            var max = arr.Max(x => x.Length);
            var list = arr.Where(x => x.Length == max && x != arr[arr.Length - 1]);
 
            foreach (var t in list)
                Console.WriteLine(t);
 
            Console.ReadLine();
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2019, 15:49
Помогаю со студенческими работами здесь

Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв
Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных...

Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - не менее одного
Напишите пожалуйста код :-* Дана последовательность, содержащая от 2 до 50 слов, в каждом из...

Данная последовательность, содержащая от 1 до 27 слов, в каждом из которых от 1 до 5 строчных латинских букв
Данная последовательность, содержащая от 1 до 27 слов, в каждом из которых от 1 до 5 строчных...

Задана фраза – последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв
Задана фраза – последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5...


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

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

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