Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
VanyakaCompany
3 / 2 / 2
Регистрация: 15.07.2014
Сообщений: 77
#1

Работа со строками - C++

06.05.2016, 23:29. Просмотров 338. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Работа со строками (C++):

Работа со строками - C++
Подсчитать количество вхождений слова «мама» в строку и вывести номера первых позиций этих вхождений. Если этого слова в строке нет, то...

Работа со строками - C++
ммм, в общем задание такое: Если честно чувствую себя тупым, читая это задание... Препод сказал, что строка вводится без пробелов...

Работа со строками C++ - C++
Задание: Запросить у пользователя массив из 10 строк и вывести на экран те, которые равны слову «Ура». #include &quot;stdafx.h&quot; #include...

Работа со строками - C++
Дана строка, содержащая полное имя файла. Выделить из этой строки название последнего каталога (без символов «\»). Если файл содержится в...

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

Работа со строками - C++
Доброго времени суток! Пробую создать программу, которая разделяет строку на слова, убирает из них последующие включения первой буквы, и...

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

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

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

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

В-пятых, что за бардак с включением заголовочных файлов? Что тут делает какой-то "stdafx.h"? И с какой целью в код включены одновременно <cstring> и <string.h>? Зачем включен <iostream>?
0
VanyakaCompany
3 / 2 / 2
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Работа со строками C++ - C++
Решил посвятить этой проблеме отдельную тему. В попытке написать ответ к этой задаче на С++ запнулся на работе со строками. Собственно...

Работа со строками - C++
Написать программу, которая считывает текст и определяет, сколько в нем слов, состоящих не более чем из четырех букв

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


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

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

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