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

Выведите кратчайшую строку, в которой встречаются оба имени одновременно - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Узнать возрастают ли элементы одномерного массива http://www.cyberforum.ru/cpp-beginners/thread1135087.html
Вести с клавиатуры элементы одномерного массива и проверить возрастает или нет?
C++ Вычисление суммы членов ряда Составить программу по вычислению суммы членов ряда: \sum_{K=1}^{N}\frac{K!}{\frac{1}{2}+\frac{1}{3}+...+\frac{1}{K+1}} Не знаю, как вычислить факториал и вообще саму структуру программы... Заранее благодарен. http://www.cyberforum.ru/cpp-beginners/thread1135080.html
C++ Сортировка std::list ошибка компиляции algorithm 3868 error C2784
Добрый день, есть пользовательский класс, с вектором в качестве контейнера всё работает хорошо. А вот со списком вылетает ошибка: 1>------ Build started: Project: dummy, Configuration: Debug Win32 ------ 1> Source.cpp 1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\algorithm(3868): error C2784: ''unknown-type' std::operator -(std::move_iterator<_RanIt> &,const...
C++ Использование множества set
Задача состоит в следующем: необходимо заполнить массив числами от 1 до 49 случайным образом так, чтобы числа не повторялись. Идея состояла в следующем: при каждой новой генерации числа проверяю, нету ли его в массиве с помощью метода count. Если нету, то добавляю число в массив. Если же во множестве такой элемент уже содержится, то перехожу к новой итерации, не увеличивая при этом индекс i. Вот...
C++ Code Blocks компилятор GCC: где найти учебник http://www.cyberforum.ru/cpp-beginners/thread1135053.html
Скажите пожалуйста, где можно найти нормальный учебник для этого компилятора, а то большинство для Visual Stydio.
C++ Целочисленные массивы: чередование минимального и максимального элементов Как в целочисленном массиве сделать ,чтобы чередовались сначала минимальный элемент ,а потом максимальный? подробнее

Показать сообщение отдельно
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151

Выведите кратчайшую строку, в которой встречаются оба имени одновременно - C++

31.03.2014, 18:55. Просмотров 239. Ответов 0
Метки (Все метки)

Есть задача:
Марсиане Миша и Маша решили вместе подобрать подарок на день рождения Кати. Когда они наконец нашли то, что хотели, и упаковали предмет в красивую коробку, надо было решить, как подписать подарок. Друзья подумали, что лучшим решением будет составить общую подпись так, чтобы в ней как подстроки содержались их имена.

Учтите, что на Марсе принято подписываться полными именами, а они у марсиан могут быть достаточно длинными.

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

Входной файл INPUT.TXT содержит две строки, в которых записаны полные имена друзей. Имена, как ни странно, состоят из букв латинского алфавита, из которых только первая – прописная. Длина имен не превосходит 1000.

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

В выходной файл OUTPUT.TXT выведите кратчайшую строку, в которой встречаются имена Миши и Маши одновременно. Буквы, с которых имена начинаются в этой строке нужно сделать большими. Если существует несколько решений, выведите то, которое меньше в алфавитном порядке.

Примеры:

Ввод:
Misha
Masha

Вывод:
MashaMisha

Ввод:
Julya
Lyalya

Вывод:
JuLyalya

Напишите пожалуйста свое решение и/или найдите ошибку в моем:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
#include <iostream>
 
int main(){
    char a[1001], b[1001], c[3001]={0}, d[3001]={0};
    int i, z;
    scanf("%s%s", &a, &b);
    
    c[0]=a[0];
    for(i=1; i<strlen(a); i++){
        if(a[i]==b[0]+32){
            for(z=1; a[i+z] && b[z]; z++) { if(a[i+z]!=b[z]) break; }
 
            if(a[i+z]==0 || b[z]==0) {
                for(z=0; b[z]; z++ ) c[i+z]=b[z];
 
                if(i+strlen(b)<strlen(a)) for(i=i+strlen(b); a[i]; i++) c[i]=a[i]; 
                goto A;
            }
        }
        c[i]=a[i];
    }
    for(z=0; b[z]; z++) c[i+z]=b[z];
A:
 
    d[0]=b[0];
    for(i=1; i<strlen(b); i++){
        if(b[i]==a[0]+32){
            for(z=1; b[i+z] && a[z]; z++) { if(b[i+z]!=a[z]) break; }
 
            if(b[i+z]==0 || a[z]==0) {
                for(z=0; a[z]; z++ ) d[i+z]=a[z];
 
                if(i+strlen(a)<strlen(b)) for(i=i+strlen(a); b[i]; i++) d[i]=b[i]; 
                goto B;
            }
        }
        d[i]=b[i];
    }
    for(z=0; a[z]; z++) d[i+z]=a[z];
 
B:
 
 
 
    if(strlen(c)<strlen(d)) printf("%s", c);
    else if(strlen(c)>strlen(d)) printf("%s", d);
    else {
        for(i=0; c[i]; i++) if(c[i]>d[i]) break;
        if(c[i]!=0)  printf("%s", d);
        else printf("%s", c);
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru