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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Мотороллер
430 / 241 / 37
Регистрация: 05.08.2013
Сообщений: 1,656
Завершенные тесты: 1
#1

Проверка на зеркальное отражение строки - C++

01.05.2014, 10:42. Просмотров 1453. Ответов 24
Метки нет (Все метки)

Для общения в полевых условиях используется система обмена сообщениями WhoDown. Так
как вся связь в поле идет через радиоканал, а магнитная обстановка на поле нестабильна, то
приходится передавать сообщение так, чтобы при некоторых потерях информацию можно было
восстановить. Для того, чтобы привести сообщение в восстанавливаемый вид, его разворачивают и
приписывают к самому себе в конце, после чего передают. Так сообщение «hello» превратится в
«helloolleh». Вы отвечаете за написание программной части принимающего устройства, которая
определяет, было повреждено сообщение или нет.
Формат входных данных
На стандартный консольный вход Вашей программе подается одна строка — полученное
сообщение.
Формат выходных данных
Выведете «YES», если сообщение было повреждено во время передачи и «NO» - если не
было.
Примеры
Входные данные Ожидаемый результат работы
helloolleh NO
ghj YES
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
#include <iostream>
#include <cstring>
using namespace std;
 
int main()
{
    char str[1000];
    cin.getline(str, 1000);
    if (strlen(str) % 2 != 0)
    {
        cout<<"YES";
    }
    else 
    {
        int i, j;
        for (i=0, j=strlen(str)-1; str[i] == str[j] && i < j; i++, j--);
        
        if (i<j)
            cout<<"YES";
        else 
            cout<<"NO";
    }
    return 0;
}
прога проходит 10 тестов. тестирующая система не дает тесты где крашится. вроде все верно,может кто-то увидит баги
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2014, 10:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка на зеркальное отражение строки (C++):

Зеркальное отражение строки - C++
Всем привет. Такая задача: Написать программу реализующую зеркальное отражение строки Вот что я накалякал :)Подскажите что здесь не так?...

Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки - C++
Дана строка s, содержащая n символов s1, s2, ... , sn,. Если эта строка является Палиндромом то есть s1 = sn, s2= sn-1..., то оставить...

Строка символов s1, s2, . , sn. Зеркальное отражение строки без последнего символа - C++
Условие: Дана строка s, содержащая n символов s1, s2, ... , sn,. Если эта строка является Палиндромом то есть s1 = sn, s2= sn-1..., то...

Зеркальное Отражение И Сисстемы счисления - C++
Помогите написать программу по решению задачи Задача: Выводить все двух и трёх значные числа 10-чной Системы Счисления которые выглядь...

Зеркальное отражение относительно побочной диагонали - C++
Дана квадратная матрица А порядка М. Зеркально отразить ее элементы относительно побочной лиагонали. (при этом элементы побочной диагонали...

Зеркальное отражение числа 0001->1000 - C++
Может быть вопрос глупый, а может утро, или я еще не просунлся. все работет, но если первый ноль, то проблемка. а надо что бы и с...

24
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
01.05.2014, 12:29 #2
Максимальное количество символов оговорено?
Если макс. 1000, то в массиве должно быть 1001, для нулевого символа.
0
Tuma
60 / 41 / 18
Регистрация: 28.09.2013
Сообщений: 193
01.05.2014, 12:48 #3
Задача взята из идущей олимпиады,не помогайте ему
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.05.2014, 12:50 #4
Мотороллер, см. темы с названием "палиндром".

Добавлено через 1 минуту
Tuma, идущей куда?
0
Tuma
60 / 41 / 18
Регистрация: 28.09.2013
Сообщений: 193
01.05.2014, 12:52 #5
Куда-нибудь
0
Мотороллер
430 / 241 / 37
Регистрация: 05.08.2013
Сообщений: 1,656
Завершенные тесты: 1
01.05.2014, 13:12  [ТС] #6
Tuma, как бы да. но с моей точки зрения задача решена верно, а взять неверные тесты я не могу. поэтому и решил обратиться сюда.
Керра, все задание тут. более ничего не оговорено
0
tyrok
17 / 17 / 3
Регистрация: 31.03.2012
Сообщений: 86
01.05.2014, 13:33 #7
А почему вы взяли массив,а не просто строку
0
B@tterfly
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 5
01.05.2014, 13:44 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<cstring>
using namespace std;
int main(){
    char str[1010],str1[1010];
    cin.getline(str, 1010);
    if (strlen(str) % 2 != 0)
    {
        cout<<"YES";  
    }
    else{
        strcpy(str1,str);
        strrev(str1);
        cout<<(str1!=str?"NO":"YES");
    }  
}
пробуй
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
01.05.2014, 14:28 #9
C++
1
str1!=str
так адреса первых элементов массива сравниваются, а не массивы поэлементно

Добавлено через 9 минут
C++
1
strlen(str) % 2
вот это я бы в скобки заключил, чтобы явно порядок действий указать.
Ведь если строка с нечетным кол. символов проходит эту проверку программа может выдать неверный рез-тат. Например, так, azfza, строка искажена, но программа выдаст вроде, что нет
0
Мотороллер
430 / 241 / 37
Регистрация: 05.08.2013
Сообщений: 1,656
Завершенные тесты: 1
01.05.2014, 16:25  [ТС] #10
тестер не знает strrev
0
IrineK
Заблокирован
01.05.2014, 16:34 #11
Цитата Сообщение от Мотороллер Посмотреть сообщение
C++
1
2
3
for (i=0, j=strlen(str)-1; str[i] == str[j] && i < j; i++, j--);
if (i<j)
    cout<<"YES";
Как по-вашему это работает?

Например, строка: "helloleh"
0
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
01.05.2014, 18:22 #12
Ну, правильно оно работает. Программа говорит есть ли ошибка в выражении. На hellooleh ошибка есть.
0
IrineK
Заблокирован
01.05.2014, 18:50 #13
Цитата Сообщение от Керра Посмотреть сообщение
правильно оно работает
Таки да.

Добавлено через 6 минут
С логикой вроде все правильно.
Возможно, дело в длине строки. Если она не оговорена, перейдите на string.

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
#include <iostream>
#include <sstream>
using namespace std;
 
 
int main()
{   string str;
    getline(cin, str);
    if (str.length() % 2 != 0)
    {
        cout<<"YES";
    }
    else 
    {
        int i, j;
        for (i=0, j=str.length()-1; str[i] == str[j] && i < j; i++, j--);
        
        if (i<j)
            cout<<"YES";
        else 
            cout<<"NO";
    }
 
    return 0;
}
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.05.2014, 18:58 #14
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
#include <iostream>
#include <string>
 
bool palindrom( const std::string& s )
{
    for( size_t i=0; i<s.length()/2; ++i )
    {
        if( s[i] != s[s.length()-i-1] ) return false;
    }
    return true;
}
 
bool damaged( const std::string& s )
{
    return s.length() % 2 || !palindrom( s );
}
 
int main( ) {
 
    std::string s;
    
    std::getline( std::cin, s );
 
    std::cout << (damaged( s ) ? "YES" : "NO") << std::endl;
 
    return 0;
}
http://ideone.com/zi8RJQ
0
B@tterfly
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 5
02.05.2014, 11:00 #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
#include<cstring>
using namespace std;
int main(){
    char str[1010]="",str1[1010]="";
    int n,i;
    cin.getline(str, 1010);
    n=strlen(str);
    if(n%2!=0)
    {
        cout<<"YES";  
    }
    else{
        for(i=0;i<n;i++){
        str1[i]=str[n-i-1];
        }
        if(strcmp(str,str1))
        cout << "YES";
        else
        cout << "NO";   
    }  
}
вот без strrev)
0
02.05.2014, 11:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2014, 11:00
Привет! Вот еще темы с ответами:

в двумерном массиве (NxN) произвести зеркальное отражение относительно вертикальной оси симметрии. - C++
в двумерном массиве (NxN) произвести зеркальное отражение относительно вертикальной оси симметрии.

Зеркальное переворачивание массива - C++
Помогите решить задачу, пожалуйста: дан линейный целочисленный массив &quot;а&quot;. Зеркально перевернуть часть элементов массива, расположенных...

зеркальное отображение матрицы - C++
Здравствуйте, допустим у нас есть двумерный массив чисел 3 4 5 6 4 2 9 8 1 мне нужно &quot;зеркально отобразить&quot;, так как я сам не...

Зеркальное отображение массива - C++
Всем привет!не могу сообразить как переписать старый массив в новый, отобразить значения массива в обратном порядке у меня получилось,а вот...


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

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

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