не могу справиться с задачей по С++ |
Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 6726-й день
Шановні користувачі! Запрошуємо вас до офіційного телеграм-канала 0day Community. Тут ви зможете поспілкуватися одне з одним та дізнатися про останні новини щодо роботи ресурса, поставити запитання до адміністрації, тощо. Перейти до телеграм-канала можна відсканувавши QR-код або натиснувши на посилання: @zeroday_ua |
не могу справиться с задачей по С++ |
maxdam |
Jan 15 2016, 18:27
Пост
#1
|
Репутация: 86 Постоялец Группа: Пользователи Сообщений: 1 154 С нами с: 20-March 06 |
Нужно вводить с клавиатуры числа до тех пор, пока они равны предыдущему введенному, если число уже не равно, цикл завершается.
Определить количество таких элементов последовательности. - считаем счетчиком. Условный оператор не использовать. - if не использовать. -- конструкция... int n = 0, t = 0, i = 0, k = 0; while (i == t) { cin >> n; i = n; t = n; k++; } cout << "Количество попыток: " << k << endl; -- мозг сломал уже себе на этой задаче, она и последняя из всех заданных! Натолкните где поток мысли пошел в неправильное направление. Сообщение отредактировал maxdam - Jan 15 2016, 18:29 |
Криса |
Jan 15 2016, 20:20
Пост
#2
|
Репутация: 8 Дух Группа: Пользователи Сообщений: 25 С нами с: 6-May 11 |
cin >> n; i = n; убыточная последовательность действий - можно обойтись без лишней переменной "i" и записать 1 строкой. int n = 0, t = 0, i = 0, k = 0; while (i == t) { cin >> n; i = n; t = n; k++; } cout << "Количество попыток: " << k << endl; Так, думаю, выхода из цикла не будет никогда. |
грик |
Jan 15 2016, 20:31
Пост
#3
|
Репутация: 2 Активист Группа: Пользователи Сообщений: 267 С нами с: 20-October 13 |
int n = 0, i = 0, k = -1; cin >> n; do { k++; i = n; cin >> n; } while (i == n) cout << "Количество попыток: " << k << endl; |
Carnifex |
Jan 15 2016, 20:33
Пост
#4
|
Репутация: 16 Дух Группа: Пользователи Сообщений: 179 С нами с: 5-July 09 |
int i = 0;
int n = 0; int k = 1; i = Console.ReadKey().KeyChar; n = Console.ReadKey().KeyChar; while (i == n) { i = n; n= Console.ReadKey().KeyChar; k++; } Console.WriteLine("Попытки {0}", k); Console.ReadLine(); Сообщение отредактировал Carnifex - Jan 15 2016, 21:38 |
Phaust |
Jan 15 2016, 20:38
Пост
#5
|
Репутация: 1176 сам себе авторитет Группа: Пользователи Сообщений: 14 114 С нами с: 9-July 07 |
Скопируй текст задачи как он в оригинале
|
maxdam |
Jan 15 2016, 22:03
Пост
#6
|
Репутация: 86 Постоялец Группа: Пользователи Сообщений: 1 154 С нами с: 20-March 06 |
Оригинал задачи:
Дана последовательность целых чисел a1, a2, a3 ,..., an, в начале которой записано несколько равных между собой элементов. Определить количество таких элементов последовательности. Условный оператор не использовать. только while и логика... Сообщение отредактировал maxdam - Jan 15 2016, 22:09 |
грик |
Jan 15 2016, 22:09
Пост
#7
|
Репутация: 2 Активист Группа: Пользователи Сообщений: 267 С нами с: 20-October 13 |
Оригинал задачи: Дана последовательность целых чисел a1, a2, a3 ,..., an, в начале которой записано несколько равных между собой элементов. Определить количество таких элементов последовательности. Условный оператор не использовать. Это совсем другая задача, чем написано в первом посте. |
maxdam |
Jan 15 2016, 22:12
Пост
#8
|
Репутация: 86 Постоялец Группа: Пользователи Сообщений: 1 154 С нами с: 20-March 06 |
|
грик |
Jan 15 2016, 22:15
Пост
#9
|
Репутация: 2 Активист Группа: Пользователи Сообщений: 267 С нами с: 20-October 13 |
Мне сегодня преподаватель так объяснил эту задачу! Ну я рад, но про ввод там ничего не написано, а написано про массив целых чисел, который дан. Если так, как в первом посте, то решение я написал выше. Только while{} использовать.. do.. while и for еще нельзя.. Тогда так, как написал человек после меня, но переделай на плюсы. |
maxdam |
Jan 15 2016, 22:17
Пост
#10
|
Репутация: 86 Постоялец Группа: Пользователи Сообщений: 1 154 С нами с: 20-March 06 |
Console.ReadKey().KeyChar; - это я так понимаю cin >> ?
|
грик |
Jan 15 2016, 22:18
Пост
#11
|
Репутация: 2 Активист Группа: Пользователи Сообщений: 267 С нами с: 20-October 13 |
|
maxdam |
Jan 15 2016, 22:19
Пост
#12
|
Репутация: 86 Постоялец Группа: Пользователи Сообщений: 1 154 С нами с: 20-March 06 |
int i = 0; int n = 0; int k = 1; cin >> i; cin >> n; while (i == n) { i = n; cin >> n; k++; } cout << "Количество попыток: " << k << endl; пошел разбирать что я накосячил.. Сообщение отредактировал maxdam - Jan 15 2016, 22:21 |
Carnifex |
Jan 15 2016, 22:55
Пост
#13
|
Репутация: 16 Дух Группа: Пользователи Сообщений: 179 С нами с: 5-July 09 |
Console.ReadKey().KeyChar; - это я так понимаю cin >> ? Сорри что язык не твой. Аналогию ты понял правильно. Просто создавать проект под 10 строчек я не хотел, написал там где было открыто... |
Pylorama |
Jan 15 2016, 23:09
Пост
#14
|
Репутация: 54 Дух Группа: Пользователи Сообщений: 158 С нами с: 29-January 10 |
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... « |
Like |
Jan 15 2016, 23:25
Пост
#15
|
Репутация: 1156 ultra active user Группа: Пользователи Сообщений: 16 837 С нами с: 5-April 11 |
|
Phaust |
Jan 16 2016, 0:39
Пост
#16
|
Репутация: 1176 сам себе авторитет Группа: Пользователи Сообщений: 14 114 С нами с: 9-July 07 |
С вводом с клавиатуры то ересь какая то. Или преподаватель задачу придумал не сам, но стырил и сам толком не понял.
Моя идея такая: 1. Отсортрировать(например через std::qsort или подобное) 2. Один проход по упорядоченому масиву найти элементы попадающиеся более одного раза Итого сложность будет n*log(n) всего лишь |
maxdam |
Jan 16 2016, 0:55
Пост
#17
|
Репутация: 86 Постоялец Группа: Пользователи Сообщений: 1 154 С нами с: 20-March 06 |
А предыдущие какие? вот например писавши эту задачу я написал непроизвольно на условие: вводишь подряд 2 значения и завершается ... int n = 1, i = 0, k = 0; while (!(n == i)) { i = n; cin >> n; k++; } cout << "Количество попыток: " << k << endl; Сообщение отредактировал maxdam - Jan 16 2016, 0:57 |
Pylorama |
Jan 16 2016, 1:10
Пост
#18
|
Репутация: 54 Дух Группа: Пользователи Сообщений: 158 С нами с: 29-January 10 |
С вводом с клавиатуры то ересь какая то. Или преподаватель задачу придумал не сам, но стырил и сам толком не понял. Моя идея такая: 1. Отсортрировать(например через std::qsort или подобное) 2. Один проход по упорядоченому масиву найти элементы попадающиеся более одного раза Итого сложность будет n*log(n) всего лишь Насправді це всього лиш проста як двері задача 6.5 для вивчення азів роботи з циклами. The Evolution of a Programmer PS: сортувати не треба. Максимум один прохід - складність N. Сообщение отредактировал Pylorama - Jan 16 2016, 1:14 |
Like |
Jan 16 2016, 1:35
Пост
#19
|
Репутация: 1156 ultra active user Группа: Пользователи Сообщений: 16 837 С нами с: 5-April 11 |
Код выше после первого ввода заходит в цикл, ждёт ещё один ввод цифры и выходит, гордо выставляя счетчик на 1, типо, совпало.
Цифры могут быть одинаковыми или разными. |
Phaust |
Jan 16 2016, 1:35
Пост
#20
|
Репутация: 1176 сам себе авторитет Группа: Пользователи Сообщений: 14 114 С нами с: 9-July 07 |
В общем виде для N элементной последовательности без ограничений на данные O(N) решения нет
|
Упрощённая версия | Сейчас: 14th August 2024 - 10:58 |
Сайт не розміщує електронні версії творів, а займається лише колекціонуванням та каталогізацією посилань, що публікуються нашими користувачами. Якщо Ви є правовласником якоїсь частини опублікованого матеріалу та не бажаєте, щоб посилання на нього знаходилось в нашому каталозі, зв’яжіться з нами і ми видалимо його. Файли для обміну надані користувачами сайту і адміністрація не несе відповідальності за їх вміст. |