4 / 3 / 3
Регистрация: 15.07.2014
Сообщений: 77
1

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

06.05.2016, 23:29. Показов 1503. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2016, 23:29
Ответы с готовыми решениями:

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

Работа со строками
Есть задание: Код, который давали на лекции int main() { char s = { 0 }; gets_s(s);...

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

Работа с строками
И так дано StrCChar (s, c1, s2, n) надо заменить все символы c1 в строке s, начиная с позиции n,...

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

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

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

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

В-пятых, что за бардак с включением заголовочных файлов? Что тут делает какой-то "stdafx.h"? И с какой целью в код включены одновременно <cstring> и <string.h>? Зачем включен <iostream>?
0
4 / 3 / 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2016, 11:05
Помогаю со студенческими работами здесь

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

Работа со строками
Не могу написать правильно работающую программу для условия: Написать программу, которая к каждому...

Работа со строками
Приветствую, друзья-программисты. Дали в универе лабу по строкам. У нас выпала лекция и сказали...

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


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

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

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