Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 4992-й день

 не могу справиться с задачей по С++

maxdam
Jan 15 2016, 18:27
  
Пост #1



Репутация:   85  
Постоялец
***

Группа: Пользователи
Сообщений: 1 139
С нами с: 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
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
3 Страницы   1 2 3 >  
Reply to this topicStart new topic
Ответов(1 - 19)
Криса
Jan 15 2016, 20:20
  
Пост #2



Репутация:   8  
Дух


Группа: Пользователи
Сообщений: 25
С нами с: 6-May 11


(maxdam @ Jan 15 2016, 18:27) Перейти к цитате

cin >> n;
i = n;


убыточная последовательность действий - можно обойтись без лишней переменной "i" и записать 1 строкой.

(maxdam @ Jan 15 2016, 18:27) Перейти к цитате

int n = 0, t = 0, i = 0, k = 0;
while (i == t)
{

cin >> n;
i = n;
t = n;

k++;
}
cout << "Количество попыток: " << k << endl;



Так, думаю, выхода из цикла не будет никогда.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
грик
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;
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
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
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Phaust
Jan 15 2016, 20:38
  
Пост #5



Репутация:   1175  
сам себе авторитет
******

Группа: Пользователи
Сообщений: 14 105
С нами с: 9-July 07


Скопируй текст задачи как он в оригинале
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
maxdam
Jan 15 2016, 22:03
  
Пост #6



Репутация:   85  
Постоялец
***

Группа: Пользователи
Сообщений: 1 139
С нами с: 20-March 06


Оригинал задачи:
Дана последовательность целых чисел a1, a2, a3 ,..., an, в начале которой записано несколько равных между собой элементов.
Определить количество таких элементов последовательности. Условный оператор не использовать.


только while и логика...

Сообщение отредактировал maxdam - Jan 15 2016, 22:09
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
грик
Jan 15 2016, 22:09
  
Пост #7



Репутация:   2  
Активист
*

Группа: Пользователи
Сообщений: 267
С нами с: 20-October 13


(maxdam @ Jan 15 2016, 22:03) Перейти к цитате

Оригинал задачи:
Дана последовательность целых чисел a1, a2, a3 ,..., an, в начале которой записано несколько равных между собой элементов.
Определить количество таких элементов последовательности. Условный оператор не использовать.

Это совсем другая задача, чем написано в первом посте.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
maxdam
Jan 15 2016, 22:12
  
Пост #8



Репутация:   85  
Постоялец
***

Группа: Пользователи
Сообщений: 1 139
С нами с: 20-March 06


(грик @ Jan 15 2016, 22:09) Перейти к цитате

Это совсем другая задача, чем написано в первом посте.


Мне сегодня преподаватель так объяснил эту задачу!
Только while{} использовать.. do.. while и for еще нельзя..

Сообщение отредактировал maxdam - Jan 15 2016, 22:14
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
грик
Jan 15 2016, 22:15
  
Пост #9



Репутация:   2  
Активист
*

Группа: Пользователи
Сообщений: 267
С нами с: 20-October 13


(maxdam @ Jan 15 2016, 22:12) Перейти к цитате

Мне сегодня преподаватель так объяснил эту задачу!

Ну я рад, но про ввод там ничего не написано, а написано про массив целых чисел, который дан. Если так, как в первом посте, то решение я написал выше.

(maxdam @ Jan 15 2016, 22:12) Перейти к цитате

Только while{} использовать.. do.. while и for еще нельзя..

Тогда так, как написал человек после меня, но переделай на плюсы.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
maxdam
Jan 15 2016, 22:17
  
Пост #10



Репутация:   85  
Постоялец
***

Группа: Пользователи
Сообщений: 1 139
С нами с: 20-March 06


Console.ReadKey().KeyChar; - это я так понимаю cin >> ?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
грик
Jan 15 2016, 22:18
  
Пост #11



Репутация:   2  
Активист
*

Группа: Пользователи
Сообщений: 267
С нами с: 20-October 13


(maxdam @ Jan 15 2016, 22:17) Перейти к цитате

Console.ReadKey().KeyChar; - это я так понимаю cin >> ?

Нет, но пиши cin.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
maxdam
Jan 15 2016, 22:19
  
Пост #12



Репутация:   85  
Постоялец
***

Группа: Пользователи
Сообщений: 1 139
С нами с: 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
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Carnifex
Jan 15 2016, 22:55
  
Пост #13



Репутация:   16  
Дух


Группа: Пользователи
Сообщений: 179
С нами с: 5-July 09


Console.ReadKey().KeyChar; - это я так понимаю cin >> ?

Сорри что язык не твой. Аналогию ты понял правильно. Просто создавать проект под 10 строчек я не хотел, написал там где было открыто...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Pylorama
Jan 15 2016, 23:09
  
Пост #14



Репутация:   54  
Дух


Группа: Пользователи
Сообщений: 158
С нами с: 29-January 10


» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Like
Jan 15 2016, 23:25
  
Пост #15



Репутация:   865  
ultra active user
******

Группа: VIP
Сообщений: 10 504
С нами с: 5-April 11


(maxdam @ Jan 15 2016, 18:27) Перейти к цитате
мозг сломал уже себе на этой задаче, она и последняя из всех заданных!
А предыдущие какие?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Phaust
Jan 16 2016, 0:39
  
Пост #16



Репутация:   1175  
сам себе авторитет
******

Группа: Пользователи
Сообщений: 14 105
С нами с: 9-July 07


С вводом с клавиатуры то ересь какая то. Или преподаватель задачу придумал не сам, но стырил и сам толком не понял.
Моя идея такая:
1. Отсортрировать(например через std::qsort или подобное)
2. Один проход по упорядоченому масиву найти элементы попадающиеся более одного раза
Итого сложность будет n*log(n) всего лишь
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
maxdam
Jan 16 2016, 0:55
  
Пост #17



Репутация:   85  
Постоялец
***

Группа: Пользователи
Сообщений: 1 139
С нами с: 20-March 06


(Like @ Jan 15 2016, 23:25) Перейти к цитате

А предыдущие какие?


вот например писавши эту задачу я написал непроизвольно на условие: вводишь подряд 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
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Pylorama
Jan 16 2016, 1:10
  
Пост #18



Репутация:   54  
Дух


Группа: Пользователи
Сообщений: 158
С нами с: 29-January 10


(Phaust @ Jan 16 2016, 0:39) Перейти к цитате

С вводом с клавиатуры то ересь какая то. Или преподаватель задачу придумал не сам, но стырил и сам толком не понял.
Моя идея такая:
1. Отсортрировать(например через std::qsort или подобное)
2. Один проход по упорядоченому масиву найти элементы попадающиеся более одного раза
Итого сложность будет n*log(n) всего лишь

Насправді це всього лиш проста як двері задача 6.5 для вивчення азів роботи з циклами.
The Evolution of a Programmer
PS: сортувати не треба. Максимум один прохід - складність N.

Сообщение отредактировал Pylorama - Jan 16 2016, 1:14
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Like
Jan 16 2016, 1:35
  
Пост #19



Репутация:   865  
ultra active user
******

Группа: VIP
Сообщений: 10 504
С нами с: 5-April 11


Код выше после первого ввода заходит в цикл, ждёт ещё один ввод цифры и выходит, гордо выставляя счетчик на 1, типо, совпало.
Цифры могут быть одинаковыми или разными.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Phaust
Jan 16 2016, 1:35
  
Пост #20



Репутация:   1175  
сам себе авторитет
******

Группа: Пользователи
Сообщений: 14 105
С нами с: 9-July 07


В общем виде для N элементной последовательности без ограничений на данные O(N) решения нет
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

3 Страницы   1 2 3 >
Reply to this topicStart new topic

 



- Упрощённая версия
Сейчас: 15th November 2019 - 10:39
Сайт не предоставляет электронные версии произведений, а занимается лишь коллекционированием и каталогизацией ссылок, присылаемых и публикуемых на форуме нашими читателями. Если вы являетесь правообладателем какого-либо представленного материала и не желаете чтобы ссылка на него находилась в нашем каталоге, свяжитесь с нами и мы удалим её. Файлы для обмена предоставлены пользователями сайта.