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

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

Восстановить пароль Регистрация
 
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
31.03.2014, 18:55     Выведите кратчайшую строку, в которой встречаются оба имени одновременно #1
Есть задача:
Марсиане Миша и Маша решили вместе подобрать подарок на день рождения Кати. Когда они наконец нашли то, что хотели, и упаковали предмет в красивую коробку, надо было решить, как подписать подарок. Друзья подумали, что лучшим решением будет составить общую подпись так, чтобы в ней как подстроки содержались их имена.

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

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

Входной файл 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);
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2014, 18:55     Выведите кратчайшую строку, в которой встречаются оба имени одновременно
Посмотрите здесь:

Выведите на экран значение переменных в строку и в столбик C++
Поменять местами первую строку и строку, в которой находится первый нулевой элемент. Принять, что массив просматривается слева направо и сверху вниз. C++
Поменять местами первую строку и строку сумма элементов которой минимальна C++
разделите каждый элемент массива на значение первого элемента строки, в которой они расположены и результат выведите на экран C++
C++ Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2.
C++ Дана строка, в которой слова разделены одним пробелом. Найдите и выведите все слова указанной длины
C++ В первую строку выходного файла выведите ровно N различных целых чисел
Найти элементы, которые встречаются одновременно в трёх массивах C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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