не могу справиться с задачей по С++ |
Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 6783-й день
Шановні користувачі! Запрошуємо вас до офіційного телеграм-канала 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 |
Like |
Jan 16 2016, 1:45
Пост
#21
|
Репутация: 1156 ultra active user Группа: Пользователи Сообщений: 16 837 С нами с: 5-April 11 |
К тому же, здесь в коде сравниваются пары чисел, а не их последовательность.
Насколько я понял, мы забиваем ряд чисел и счетчик должен показать сколько раз числа совпали, а цикл быть бесконечным. Тут же программа отрабатывает два ввода значений и завершается. Причем не закциклишь наскоком в мейн, поскольку за счет инициализации второй переменной значением первой мы каждый раз в цикл будем встревать, а счётчик от этого тикать. Недавно попадалась задачка похожего плана, если склероз не подкачает попробую вспомнить. Но не ночь глядя. Сообщение отредактировал Like - Jan 16 2016, 1:46 |
Pylorama |
Jan 16 2016, 4:13
Пост
#22
|
Репутация: 54 Дух Группа: Пользователи Сообщений: 158 С нами с: 29-January 10 |
В общем виде для N элементной последовательности без ограничений на данные O(N) решения нет 1. Можна припустити, що на початку є декілька послідовно розташованих однакових елементів і потрібно порахувати їх кількість. Тоді достатньо пройтись по послідовності до зустрічі з першим інакшим елементом. Кількість ітерацій у найгіршому випадку (усі елементи однакові) становитиме N. 2. Можна припустити, що на початку є декілька послідовно розташованих однакових елементів і потрібно порахувати кількість елементів рівних першому у всій послідовності. Якщо послідовність: 3 3 2 1 3 5, як сортування допоможе Без умовного оператора то буде страшний монстр Франкенштейна. А можна не парити собі мізки. |
Like |
Jan 16 2016, 10:39
Пост
#23
|
Репутация: 1156 ultra active user Группа: Пользователи Сообщений: 16 837 С нами с: 5-April 11 |
Цикл бесконечный, счетчик реагирует на все случаи, когда новое введенное число равно предыдущему.
Для выхода из цикла по совпадению адаптируйте под себя. » Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... « ЗЫ Хотя задачка и позволяет разобраться с функционалом отдельного инструмента, но все-равно из категории "у вас есть 5 передач и 4 колеса, но пользоваться вам можно только передачей заднего хода и только одной парой из колес по вашему усмотрению". Это при всех то возможностях с++ на минуточку. Сообщение отредактировал Like - Jan 16 2016, 18:22 |
dimich |
Jan 16 2016, 10:46
Пост
#24
|
Репутация: 25 Активист Группа: Пользователи Сообщений: 222 С нами с: 4-April 06 |
int n = 0, t = 0, i = 0, k = 0; while (i == t) { cin >> n; i = n; t = n; k++; } cout << "Количество попыток: " << k << endl; Подсказка: переменные i и t должны вводиться в цикле с клавиатуры. А n тебе вообще не нужна. Под спойлером решение. » Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... « Сообщение отредактировал dimich - Jan 16 2016, 10:49 |
maxdam |
Jan 16 2016, 13:45
Пост
#25
|
Репутация: 86 Постоялец Группа: Пользователи Сообщений: 1 154 С нами с: 20-March 06 |
Подсказка: переменные i и t должны вводиться в цикле с клавиатуры. А n тебе вообще не нужна. Под спойлером решение. » Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... « Мысля крутилась в приблизительно правильном направлении... два ввода.. сравнение - правда - ввод - сравнение... Сообщение отредактировал maxdam - Jan 16 2016, 15:30 |
Carnifex |
Jan 16 2016, 17:58
Пост
#26
|
Репутация: 16 Дух Группа: Пользователи Сообщений: 179 С нами с: 5-July 09 |
while (true && i !=0) Не делай так больше Это все равно что написать: ПОКА(true ИЛИ true ИЛИ false) - зачем два раза писать true... Сообщение отредактировал Carnifex - Jan 16 2016, 18:06 |
Like |
Jan 16 2016, 18:23
Пост
#27
|
Репутация: 1156 ultra active user Группа: Пользователи Сообщений: 16 837 С нами с: 5-April 11 |
Спасибо, поправил.
Оно хоть и не мешает, но там лишнее. |
Pylorama |
Jan 16 2016, 21:24
Пост
#28
|
Репутация: 54 Дух Группа: Пользователи Сообщений: 158 С нами с: 29-January 10 |
|
maxdam |
Jan 17 2016, 1:32
Пост
#29
|
Репутация: 86 Постоялец Группа: Пользователи Сообщений: 1 154 С нами с: 20-March 06 |
|
Pylorama |
Jan 17 2016, 12:57
Пост
#30
|
Репутация: 54 Дух Группа: Пользователи Сообщений: 158 С нами с: 29-January 10 |
|
maxdam |
Jan 17 2016, 13:08
Пост
#31
|
Репутация: 86 Постоялец Группа: Пользователи Сообщений: 1 154 С нами с: 20-March 06 |
Я думал у тебя код не запускается..
Кстати да .... Сообщение отредактировал maxdam - Jan 17 2016, 13:10 |
Carnifex |
Jan 17 2016, 19:01
Пост
#32
|
Репутация: 16 Дух Группа: Пользователи Сообщений: 179 С нами с: 5-July 09 |
шось зовсім не працює. абсолютно Просто старые значения не сохраняются. Цепочки нет. Сравнивается каждое первое с каждым вторым и все. Пока не попадешь в пару разных чисел - цикл не закончится. Как по мне, так внутри цикла стоит делать только одну оперцию считывания из консоли. Все останое вынести в начальное заполнение. Сообщение отредактировал Carnifex - Jan 17 2016, 19:02 |
Phaust |
Jan 17 2016, 22:09
Пост
#33
|
Репутация: 1176 сам себе авторитет Группа: Пользователи Сообщений: 14 116 С нами с: 9-July 07 |
Я не могу это читать.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... « Сообщение отредактировал Phaust - Jan 17 2016, 22:11 |
Pylorama |
Jan 18 2016, 0:40
Пост
#34
|
Репутация: 54 Дух Группа: Пользователи Сообщений: 158 С нами с: 29-January 10 |
|
dimich |
Jan 18 2016, 8:26
Пост
#35
|
Репутация: 25 Активист Группа: Пользователи Сообщений: 222 С нами с: 4-April 06 |
|
Garry89 |
Jan 28 2016, 21:23
Пост
#36
|
Репутация: 7 Дух Группа: Пользователи Сообщений: 87 С нами с: 24-June 08 |
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... « |
Bartimeus |
Feb 10 2016, 16:11
Пост
#37
|
Репутация: 217 Активист Группа: - Пользователи - Сообщений: 455 С нами с: 27-June 09 |
Коллеги, читайте внимательно условие задачи.
Оригинал задачи: Дана последовательность целых чисел a1, a2, a3 ,..., an, в начале которой записано несколько равных между собой элементов. Определить количество таких элементов последовательности. Условный оператор не использовать. Тоесть у нас на вход есть масив, все что нам нухно это узнать количество одинаковых элементов в начале последовалельности. Тоесть по факту у нас есть случай 1111134967, и я должен почитать количество единиц в начале и вывести его. Если даже заморочится вводом для проверки то будет что-то вроде отдельной функции int arraySize = 0; int counter = 0; cout<<"Input array size" cin>>arraySize; int inputedArray[arraySize]; while(counter<arraySize) { cin>>inputedArray[couner] } Это даст нам начально заполненый масив в соответствии с условием, далее нам необходимо проверить сколько начальных элементов из него иквалы, тоесть int firstElement = inputedArray[0]; int result = 1; //так как один элемент у нас точно есть начальным while((result<inputedArray.size)&&(firstElement==inputedArray[result])) { result++; } return result; Можно сделать отдельных 2 метода, но где то так, как итог на выходе будем видеть количество елементов что задваиваются в начале, так же генерацию масива можно сделать рендомайзом. Сори если ошибки в синтаксисе, компилятора нет под рукой а на С писал очень давно..) Сообщение отредактировал Bartimeus - Feb 10 2016, 16:12 |
maxdam |
Feb 12 2016, 21:49
Пост
#38
|
Репутация: 86 Постоялец Группа: Пользователи Сообщений: 1 154 С нами с: 20-March 06 |
Вот новая задачка...
В зрительном зале 25 рядов, в каждом из которых 36 мест (кресел). Информация о проданных билетах хранится в двумерном массиве, номера строк которого соответствуют номерам рядов, а номера столбцов - номерам мест. Если билет на то или иное место продан, то соответствующий элемент массива имеет значение 1, в противном случае - 0. Составить программу, определяющую число проданных билетов на места в 12-м ряду. Вопрос: Как правильно сравнить значение в элементе if ((i == zapros) && (a[i][j] == 1))? » Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... « Сообщение отредактировал maxdam - Feb 12 2016, 21:49 |
Like |
Feb 12 2016, 23:40
Пост
#39
|
Репутация: 1156 ultra active user Группа: Пользователи Сообщений: 16 837 С нами с: 5-April 11 |
Два сообщения, одно с практическим аспектом и побуждает интерес разбираться, второе - желание послать тему куда подальше. Это ж занятие какое интересное, в цифрах сухих копаться...
|
maxdam |
Feb 13 2016, 0:40
Пост
#40
|
Репутация: 86 Постоялец Группа: Пользователи Сообщений: 1 154 С нами с: 20-March 06 |
a[i][j] = rand() % 2;
Найдена ошибка, снимаю вопрос (( |
Упрощённая версия | Сейчас: 10th October 2024 - 12:00 |
Сайт не розміщує електронні версії творів, а займається лише колекціонуванням та каталогізацією посилань, що публікуються нашими користувачами. Якщо Ви є правовласником якоїсь частини опублікованого матеріалу та не бажаєте, щоб посилання на нього знаходилось в нашому каталозі, зв’яжіться з нами і ми видалимо його. Файли для обміну надані користувачами сайту і адміністрація не несе відповідальності за їх вміст. |