Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Мотороллер
428 / 240 / 37
Регистрация: 05.08.2013
Сообщений: 1,629
Завершенные тесты: 1
01.05.2014, 10:42     Проверка на зеркальное отражение строки #1
Для общения в полевых условиях используется система обмена сообщениями 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 тестов. тестирующая система не дает тесты где крашится. вроде все верно,может кто-то увидит баги
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
01.05.2014, 12:29     Проверка на зеркальное отражение строки #2
Максимальное количество символов оговорено?
Если макс. 1000, то в массиве должно быть 1001, для нулевого символа.
Tuma
59 / 40 / 18
Регистрация: 28.09.2013
Сообщений: 186
01.05.2014, 12:48     Проверка на зеркальное отражение строки #3
Задача взята из идущей олимпиады,не помогайте ему
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.05.2014, 12:50     Проверка на зеркальное отражение строки #4
Мотороллер, см. темы с названием "палиндром".

Добавлено через 1 минуту
Tuma, идущей куда?
Tuma
59 / 40 / 18
Регистрация: 28.09.2013
Сообщений: 186
01.05.2014, 12:52     Проверка на зеркальное отражение строки #5
Куда-нибудь
Мотороллер
428 / 240 / 37
Регистрация: 05.08.2013
Сообщений: 1,629
Завершенные тесты: 1
01.05.2014, 13:12  [ТС]     Проверка на зеркальное отражение строки #6
Tuma, как бы да. но с моей точки зрения задача решена верно, а взять неверные тесты я не могу. поэтому и решил обратиться сюда.
Керра, все задание тут. более ничего не оговорено
tyrok
17 / 17 / 3
Регистрация: 31.03.2012
Сообщений: 86
01.05.2014, 13:33     Проверка на зеркальное отражение строки #7
А почему вы взяли массив,а не просто строку
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");
    }  
}
пробуй
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
01.05.2014, 14:28     Проверка на зеркальное отражение строки #9
C++
1
str1!=str
так адреса первых элементов массива сравниваются, а не массивы поэлементно

Добавлено через 9 минут
C++
1
strlen(str) % 2
вот это я бы в скобки заключил, чтобы явно порядок действий указать.
Ведь если строка с нечетным кол. символов проходит эту проверку программа может выдать неверный рез-тат. Например, так, azfza, строка искажена, но программа выдаст вроде, что нет
Мотороллер
428 / 240 / 37
Регистрация: 05.08.2013
Сообщений: 1,629
Завершенные тесты: 1
01.05.2014, 16:25  [ТС]     Проверка на зеркальное отражение строки #10
тестер не знает strrev
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"
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
01.05.2014, 18:22     Проверка на зеркальное отражение строки #12
Ну, правильно оно работает. Программа говорит есть ли ошибка в выражении. На hellooleh ошибка есть.
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;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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
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)
Qazan
211 / 59 / 9
Регистрация: 30.04.2013
Сообщений: 780
Записей в блоге: 10
02.05.2014, 14:07     Проверка на зеркальное отражение строки #16
Задача A

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 <iostream>
 
int main()
{
    const int n = 1000010;
    char * t = new char[n];
    std::cin.getline(t,n);
    
    int j = 0;
    while(t[j] != '\0') j++;
 
    if(j%2 != 0) std::cout << "YES";
    else
    {
    
        bool q = true;
        int m = j/2;
        for(int i = 0;i < m;i++)
            if(t[i] != t[j - i - 1])
            {
             q = false;
             break;
            }
 
        std::cout << (q ? "NO": "YES");
    }
    return 0;
}
Что можно сделать лучше ?
Учавствовал олимпиаде от Типичного программиста

мне просто интересно
вот не проходит тесты :

Инфо
Итог
Посылки
Положение участников
Отправить вопрос
Сообщения


Неполное решение

Всего тестов: 22, пройдено: 14, не пройдено: 8.
Получено баллов: 60 (из 100).

N Результат Время (с) Баллы
1 OK 0.000 1 (1)
2 OK 0.000 1 (1)
3 OK 0.080 1 (1)
4 OK 0.084 1 (1)
5 OK 0.084 1 (1)
6 OK 0.012 1 (1)
7 OK 0.080 1 (1)
8 OK 0.008 1 (1)
9 OK 0.036 1 (1)
10 Неправильный ответ 0.080 0 (1)
11 OK 0.064 1 (1)
12 OK 0.064 1 (1)
13 OK 0.024 1 (1)
14 Неправильный ответ 0.084 0 (1)
15 Неправильный ответ 0.084 0 (1)
16 OK 0.000 1 (1)
17 Неправильный ответ 0.080 0 (1)
18 Неправильный ответ 0.076 0 (1)
19 Неправильный ответ 0.084 0 (1)
20 Неправильный ответ 0.084 0 (1)
21 Неправильный ответ 0.076 0 (1)
22 OK 0.000 1 (1)
Вложения
Тип файла: pdf tpolymp.pdf (124.3 Кб, 13 просмотров)
Qazan
211 / 59 / 9
Регистрация: 30.04.2013
Сообщений: 780
Записей в блоге: 10
02.05.2014, 14:31     Проверка на зеркальное отражение строки #17
все рубит
Qazan
211 / 59 / 9
Регистрация: 30.04.2013
Сообщений: 780
Записей в блоге: 10
02.05.2014, 15:27     Проверка на зеркальное отражение строки #18
IrineK, просто нужно было увеличить длину строки .. концерт вобщем
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
02.05.2014, 15:29     Проверка на зеркальное отражение строки #19
1) Двойные повреждения сообщения не всегда можно определить, так что условие задачи, по-моему, некорректно.
2) Не вижу в условии ограничения на длину строки - 1000010 точно хватит?

Добавлено через 1 минуту
А, всё уже. В любом случае ограничений на строку нигде не видно...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2014, 15:30     Проверка на зеркальное отражение строки
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Qazan
211 / 59 / 9
Регистрация: 30.04.2013
Сообщений: 780
Записей в блоге: 10
02.05.2014, 15:30     Проверка на зеркальное отражение строки #20
Мотороллер, Олимпиадная задача на зеркальное отражение строки
вот все рубит

длина строки я сделал 10 млн .
с миллионо не проходило восемь тестов ,вобщем экстенсивный путь
Yandex
Объявления
02.05.2014, 15:30     Проверка на зеркальное отражение строки
Ответ Создать тему
Опции темы

Текущее время: 23:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru