Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
VanyakaCompany
3 / 2 / 3
Регистрация: 15.07.2014
Сообщений: 77
1

Работа со строками

06.05.2016, 23:29. Просмотров 375. Ответов 2
Метки нет (Все метки)

Имеется задачка (олимпиадная, но олимпиада уже прошла):

Новый кодовый замок для владельцев нетбуков представляет головоломку не только для грабителей, но и для владельцев. На табло замка все время высвечивается некоторая комбинация нулей и единиц. Замок откроется, если на табло высветится некоторая определенная комбинация. Получить требуемую комбинацию из текущей можно нажимая в нужной последовательности кнопки, на которых написано 0 и 1 соответственно. Если нажать кнопку с нулем, то текущая комбинация на табло сдвигается на одну позицию вправо (правая цифра при этом исчезает), а в самом левом разряде записывается 0. При нажатии на кнопку с единицей происходит то же самое, только в левый разряд записывается 1. Известно, какая комбинация цифр сейчас находится на табло, и какую комбинацию требуется получить, чтобы открыть замок. Помогите владельцу нетбука - определите, за какое минимальное количество нажатий на кнопки можно получить требуемую комбинацию.

Формат входных данных: Первая строка содержит текущую последовательность цифр, вторая строка - последовательность, которую требуется получить. Гарантируется, что обе последовательности не пустые, имеют одинаковую длину, не превосходящую 100 000, и состоят только из нулей и единиц. Цифры в строках записаны подряд (без пробелов).

Формат выходных данных: Выведите минимальное количество нажатий на кнопки, с помощью которого можно решить поставленную задачу.

Вот мой код:
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
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string.h>
 
using namespace std;
 
char str1[100000];
char str2[100000];
int a = 0;
 
int main()
{
    setlocale(0, "");
    scanf("%s", &str1);
 
    scanf("%s", &str2);
    
    while ((strcmp(_strrev(_strrev(str1) + a), str2+a)) != 0)
    {
        a++;
    }
    printf("%d\n", a);
    
    system("pause");
    return 0;
}
Пусть алгоритм не идеальный, но работать должен. Однако в некоторых случаях, точнее в большинстве из них, выдаёт неправильный ответ.
Например при введённых 1011 и 1111 должен выводить 3, а выводит 2.
Объясните в чём ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2016, 23:29
Ответы с готовыми решениями:

Работа со строками. Функции работы со строками
Дана строка символов. В заданном тексте определить позицию первой точки ‘ . ‘.

Работа со строками
Даны строки S1 и S2. Удалить из строки S1 последнюю подстроку, совпадающую с...

Работа со строками
Задание : 1.Напишите функцию, которая проверяет правильность введенного...

Работа со строками
#include &lt;iostream&gt; #include &quot;locale.h&quot; using namespace std; char...

Работа со строками
Написать программу, которая считывает текст и определяет, сколько в нем слов,...

2
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4608 / 2422 / 674
Регистрация: 18.10.2014
Сообщений: 4,134
07.05.2016, 03:30 2
Цитата Сообщение от VanyakaCompany Посмотреть сообщение
Пусть алгоритм не идеальный, но работать должен.
Во-первых, какой "алгоритм"? Вы пока что привели только код, т.е. реализацию некоего алгоритма. При этом, по вашим же словам, код работает неправильно, т.е. задуманному вами алгоритму скорее всего не соответствует. Каким образом по-вашему в такой ситуации мы должны определить, какой именно алгоритм вы пытались реализовать? Телепатией?

Во-вторых, прекрасно видно, что ваша реализация на каждой итерации меняет исходное значение str1 и на следующую итерацию уже идет "искореженное" значение str1. Вы именно этого хотели в вашем алгоритме? (Как профессиональный телепат, скажу вам по секрету, что именно в этом и заключается ваша ошибка.)

В-третьих, scanf("%s", str1). Никакого &.

В-четвертых, в стандартной библиотеке нет функции _strrev.

В-пятых, что за бардак с включением заголовочных файлов? Что тут делает какой-то "stdafx.h"? И с какой целью в код включены одновременно <cstring> и <string.h>? Зачем включен <iostream>?
0
VanyakaCompany
3 / 2 / 3
Регистрация: 15.07.2014
Сообщений: 77
07.05.2016, 11:05  [ТС] 3
Согласен, оформил жутко, извини.

Сделать я хотел следующее:
Пока две строки не равны, отнимать у них по 1 цифре (у первой строки - из конца, у второй строки - из начала)
Кол-во таких сокращений и есть ответ (переменная а).

Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
1011
1111
 
101
 111
 
10
  11
  
1
   1
Строки сократились 3 раза, соответственно ответ должен быть 3.

Можешь помочь реализовать это?)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2016, 11:05

Работа со строками
Дан текст.Выделить все слова,которые не содержат одинаковых символов.Различие...

Работа со строками в СИ++
Парни помагите напишите прогу если не втягость заранее благодарю))) Вот...

Работа со строками
Здравствуйте! Прошу помочь разобраться с программой, она не работает, и я не...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru