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

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

Войти
Регистрация
Восстановить пароль
 
Арсен_
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 27
#1

Проверка равенства символов. Оптимизировать код - C++

07.12.2012, 11:57. Просмотров 879. Ответов 12
Метки нет (Все метки)

Добрый день, есть задача, я срузу напишу что надо сделать:

во входном файле в первой строке дано число n - где 1 >= n <= 1000, а в остальных n строках, строки длину от 1 до 30 символов. Надо проверить первый символ равно 4 символу?
И вывести в выходной файл, сколько строк удовлетвояют данному условию.

Я решаю таким способом:
C++
1
2
3
4
5
6
7
8
9
10
#include <fstream>
 
main()
{
    std::fstream I("input.txt"), O("output.txt", 2);
    char k[31]; int p = 0;
    while(I >> k)
        if(k[0] == k[3]) p++ ;
    O << p;
}
Мне надо сократить код как можно меньше, в длине кода пробелы и переносы строк не счетаются.
В данном коде 121 символ. Я знаю что 100% данный код сократить или реализовать по другому до 111 символов.
Но не как не пойму что тут еще можно сократить или как можно еще короче реаззовать?

За помощь буду благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 11:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка равенства символов. Оптимизировать код (C++):

Оптимизировать код - C++
Доброго времени суток, как можно оптимизировать код что бы он быстрее работал ? Дана последовательность из n чисел a1, a2,..., an. C...

Оптимизировать код - C++
Первое число входного потока - количество чисел Дальше идут те самые числа Надо найти кол-во пар чисел, для которых выполняется nums &lt;=...

Оптимизировать и минимализировать код - C++
Cделал легкую прогу. Понимаю логики 0 в коде. Можете помочь оптимизировать код? А заодно и сделать код более минималистичным. #include...

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

Помогите оптимизировать код - C++
Здравствуйте! Помогите, пожалуйста, оптимизировать его: main.cpp #include &quot;main.h&quot; ...

Нужно оптимизировать код - C++
Вобщем код не принемает сайт, немного нагружает и по времени не проходит задание Август и Беатриса играют в игру. Август загадал...

12
Nik Raider
28 / 28 / 7
Регистрация: 03.02.2012
Сообщений: 59
07.12.2012, 12:11 #2
Ну раз просто меньше символов, то имена файлов сделай проще i.txt и o.txt и вот -9 символов

Добавлено через 3 минуты
и зачем k[31] ? Это обязательно? Если может не двузначное, а однозначное, вот и еще 1 символ. Итого 111 =)
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.12.2012, 12:23 #3
На коленке
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <fstream>
 
int p; 
 
main()
{
    std::fstream I("input.txt"), O("output.txt", 2);
    char k[31]; 
    while(I >> k)
        p += *k == k[3];
    O << p;
}
Вижу еще 1 символ, но его открывать не буду.

Добавлено через 2 минуты
И еще один символ вижу. Замените while на for, возможно увидите.
0
Арсен_
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 27
07.12.2012, 12:39  [ТС] #4
Спасибо вам большое))

вот сократил до 13 символов

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <fstream>
 
int p;
 
main()
{
    std::fstream I("input.txt"), O("output.txt", 2);
    char k[50]; 
    for(;I >> k;)
         p += *k == k[3];
    O << p;
}
т.к я только учу с++, у меня возникло пару вопросов))

почему у нас все работает правильно при не инициализации переменной p?
И в вырожении p += *k == k[3]; где указатель на массив k, мы получаем нулевой элемент?

Еще как вы посоветовали, создавать массив напиример до 5 элементов, char k[5]; то у меня выдает ошибку.

Может надо как то построчно считывать по 5 символов?

Добавлено через 2 минуты
Цитата Сообщение от Nik Raider Посмотреть сообщение
Ну раз просто меньше символов, то имена файлов сделай проще i.txt и o.txt и вот -9 символов

Добавлено через 3 минуты
и зачем k[31] ? Это обязательно? Если может не двузначное, а однозначное, вот и еще 1 символ. Итого 111 =)
спасибо,
в сожелению задача проверяется сервером, а на сервере названия файлов input.txt/output.txt
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
07.12.2012, 12:39 #5
Цитата Сообщение от Арсен_ Посмотреть сообщение
Еще как вы посоветовали, создавать массив напиример до 5 элементов, char k[5]; то у меня выдает ошибку.
В строке от 1 до 30 символов.
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.12.2012, 12:40 #6
Цитата Сообщение от Арсен_ Посмотреть сообщение
почему у нас все работает правильно при не инициализации переменной p?
Потому что она инициализирована. Все переменные в глобальной области видимости инциализированы их умолчательным значением, в данном случае нулем.
Цитата Сообщение от Арсен_ Посмотреть сообщение
где указатель на массив k, мы получаем нулевой элемент?
Имя массива - это указатель на его первый элемент. Разименовывая этот указатель, мы получаем его первый элемент.

Цитата Сообщение от Арсен_ Посмотреть сообщение
Может надо как то построчно считывать по 5 символов?
Нет, размер массива тут не играет роли. Подумайте, где можно объявить ваш массив, чтобы не ставить точку с запятой.
0
Арсен_
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 27
07.12.2012, 12:47  [ТС] #7
A ну даа, спасибо

C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
 
int p;
 
main()
{
    std::fstream I("input.txt"), O("output.txt", 2);
    for(char k[50];I >> k;)
         p += *k == k[3];
    O << p;
}
1 символ остался))

я вот подумал, если не использовать массив а 2 паремнных символьного типа,

тоесть char a,b; и первый символ считывать в "a" а второй в "b", или так не получиться?
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.12.2012, 12:52 #8
Цитата Сообщение от Арсен_ Посмотреть сообщение
тоесть char a,b; и первый символ считывать в "a" а второй в "b", или так не получиться?
не получиться

Цитата Сообщение от Арсен_ Посмотреть сообщение
1 символ остался))
Тут уже гадать бессмысленно, надо просто знать одну фишку, специфичную для студии.
Я вам ее не скажу, так как у меня в этой задаче 111 символов, и я не заинтересован в том, чтобы меня догоняли :)
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
07.12.2012, 12:54 #9
Цитата Сообщение от Арсен_ Посмотреть сообщение
спасибо,
в сожелению задача проверяется сервером, а на сервере названия файлов input.txt/output.txt
а ссыль можно? =)
0
Арсен_
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 27
07.12.2012, 13:00  [ТС] #10
> а ссыль можно? =) конечно) [нельзя]

Кликните здесь для просмотра всего текста
Левая рекурсия
(Время: 1 сек. Память: 16 Мб Сложность: 20%)
В теории формальных грамматик и автоматов (ТФГиА) важную роль играют так называемые контекстно-свободные грамматики (КС-грамматики). КС-грамматикой будем называть четверку, состоящую из множества N нетерминальных символов, множества T терминальных символов, множества P правил (продукций) и начального символа S, принадлежащего множеству N.

Каждая продукция p из P имеет форму A –> a, где A нетерминальный символ (A из N), а a – строка, состоящая из терминальных и нетерминальных символов. Процесс вывода слова начинается со строки, содержащей только начальный символ S. После этого на каждом шаге один из нетерминальных символов, входящих в текущую строку, заменяется на правую часть одной из продукций, в которой он является левой частью. Если после такой операции получается строка, содержащая только терминальные символы, то процесс вывода заканчивается.

Во многих теоретических задачах удобно рассматривать так называемые нормальные формы грамматик. Процесс приведения грамматики к нормальной форме часто начинается с устранения левой рекурсии. В этой задаче мы будем рассматривать только ее частный случай, называемый непосредственной левой рекурсией. Говорят, что правило вывода A –> R содержит непосредственную левую рекурсию, если первым символом строки R является A.

Задана КС-грамматика. Требуется Найти количество правил, содержащих непосредственную левую рекурсию.

Входные данные

Первая строка входного файла INPUT.TXT содержит количество n (1 <= n <= 1000) правил в грамматике. Каждая из последующих n строк содержит по одному правилу. Нетерминальные символы обозначаются заглавными буквами латинского алфавита, терминальные - строчными. Левая часть продукции отделяется от правой символами –>. Правая часть продукции имеет длину от 1 до 30 символов.

Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.

Пример

Код
№	INPUT.TXT	OUTPUT.TXT
1	    3
        S->Sabc
        S->A
        A->AA	              2


там условие задачи очень сложно написано, мне пришлось более 10 раз перечитывать)) а решение простое.

> Тут уже гадать бессмысленно, надо просто знать одну фишку, специфичную для студии.
Я вам ее не скажу, так как у меня в этой задаче 111 символов, и я не заинтересован в том, чтобы меня догоняли


Вмысле для студии? на остальных компилях пахать не будет? А на сервере на студии задачи проверяются?

Можете пожалуйста сказать это фишку? даю слово не применять ее в данной задаче!
просто очень любопытно.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
07.12.2012, 13:14 #11
Цитата Сообщение от Арсен_ Посмотреть сообщение
а ссыль можно? =) конечно)
А ID задачи? Просто по приведенной ссылке нет задачи
0
Арсен_
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 27
07.12.2012, 13:20  [ТС] #12
просто скопируйсте и вставьте, ЗАДАЧА №387
Кликните здесь для просмотра всего текста
Левая рекурсия
(Время: 1 сек. Память: 16 Мб Сложность: 20%)
В теории формальных грамматик и автоматов (ТФГиА) важную роль играют так называемые контекстно-свободные грамматики (КС-грамматики). КС-грамматикой будем называть четверку, состоящую из множества N нетерминальных символов, множества T терминальных символов, множества P правил (продукций) и начального символа S, принадлежащего множеству N.

Каждая продукция p из P имеет форму A –> a, где A нетерминальный символ (A из N), а a – строка, состоящая из терминальных и нетерминальных символов. Процесс вывода слова начинается со строки, содержащей только начальный символ S. После этого на каждом шаге один из нетерминальных символов, входящих в текущую строку, заменяется на правую часть одной из продукций, в которой он является левой частью. Если после такой операции получается строка, содержащая только терминальные символы, то процесс вывода заканчивается.

Во многих теоретических задачах удобно рассматривать так называемые нормальные формы грамматик. Процесс приведения грамматики к нормальной форме часто начинается с устранения левой рекурсии. В этой задаче мы будем рассматривать только ее частный случай, называемый непосредственной левой рекурсией. Говорят, что правило вывода A –> R содержит непосредственную левую рекурсию, если первым символом строки R является A.

Задана КС-грамматика. Требуется Найти количество правил, содержащих непосредственную левую рекурсию.

Входные данные

Первая строка входного файла INPUT.TXT содержит количество n (1 <= n <= 1000) правил в грамматике. Каждая из последующих n строк содержит по одному правилу. Нетерминальные символы обозначаются заглавными буквами латинского алфавита, терминальные - строчными. Левая часть продукции отделяется от правой символами –>. Правая часть продукции имеет длину от 1 до 30 символов.

Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.

Пример

№ INPUT.TXT OUTPUT.TXT
1 3
S->Sabc
S->A
A->AA 2
0
костя666674555
-94 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
02.01.2014, 20:55 #13
почему неработает такой код?
C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
 
 
main()
{
int p;
    std::fstream I("input.txt"), O("output.txt", 2);
    for(char k[50];I >> k;)
         p += *k == k[3];
    O << p;
}
0
02.01.2014, 20:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2014, 20:55
Привет! Вот еще темы с ответами:

Исправить и оптимизировать код - C++
нужна помощь по исправлению ошибок Написал программу она работает все отлично но препод сказал что она не очень красивая Помогите...

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

Как оптимизировать код? - C++
Как оптимизировать код, чтобы работала программа быстрее #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; using namespace...

Задача с E-olymp (оптимизировать код) - C++
Здравствуйте, уважаемые форумчане! Снова решаю задачи с сайта E-olymp. У меня возникла следующая проблема: Есть несложная задача: del И,...


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

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

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